Глиф Учебники

Как вывести число с двумя знаками после запятой

Справочник · Pascal · 2 минуты чтения

Добавьте к числу в writeln формат :0:2:

Pascal
program Format2;
var
  x: real;
begin
  x := 10 / 3;
  writeln(x:0:2);
  writeln(x:0:4);
  writeln(x:8:2);
  writeln('Итого: ', (12.5 * 3):0:2, ' руб.');
end.
Вывод
3.33
3.3333
    3.33
Итого: 37.50 руб.

Запись значение:ширина:знаки:

Если формат стоит после выражения, выражение лучше взять в скобки: (a / b):0:2.

Почему без формата число выглядит странно

writeln(x) без формата среды выводят по-разному. PascalABC.NET печатает обычную десятичную дробь со всеми знаками — 3.33333333333333 или длиннее. Free Pascal печатает в научной записи: мантисса (значащие цифры), буква E и порядок (степень десяти), что-то вроде 3.333…E+000 — это 3.333… · 10⁰. Формат :0:2 даёт одинаковый результат в обеих средах.

Ровные столбцы

Одинаковая ширина выравнивает числа по правому краю — удобно для таблиц:

Pascal
program Prices;
var
  i: integer;
begin
  for i := 1 to 4 do
    writeln(i:2, (i * 2.5):8:2);
end.
Вывод
 1    2.50
 2    5.00
 3    7.50
 4   10.00

Для целых чисел в классическом Pascal есть только ширина: writeln(n:5). Free Pascal на n:0:2 у целого n сообщит об ошибке Illegal use of ':'. Если у целого нужны знаки после точки, сделайте его дробным: (n * 1.0):0:2.

Округлить само значение

Формат меняет только вывод, переменная остаётся прежней. Если округлённое значение нужно для дальнейших расчётов:

Pascal
program RoundValue;
var
  x: real;
begin
  x := 2.71828;
  x := round(x * 100) / 100;
  writeln(x:0:2);
end.
Вывод
2.72

round(x * 100) даёт 272, деление на 100 возвращает 2.72. В PascalABC.NET то же делает функция Round(x, 2), но в Free Pascal её нет — там используйте запись выше.

Подводные камни