Как вывести число с двумя знаками после запятой
Добавьте к числу в writeln формат :0:2:
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 руб.Запись значение:ширина:знаки:
- знаки — сколько цифр после точки; число при выводе округляется до них;
- ширина — сколько символов занять всего; если число короче, слева добавляются пробелы.
0— без пробелов, ровно столько, сколько нужно.
Если формат стоит после выражения, выражение лучше взять в скобки: (a / b):0:2.
Почему без формата число выглядит странно
writeln(x) без формата среды выводят по-разному. PascalABC.NET печатает обычную десятичную дробь со всеми знаками — 3.33333333333333 или длиннее. Free Pascal печатает в научной записи: мантисса (значащие цифры), буква E и порядок (степень десяти), что-то вроде 3.333…E+000 — это 3.333… · 10⁰. Формат :0:2 даёт одинаковый результат в обеих средах.
Ровные столбцы
Одинаковая ширина выравнивает числа по правому краю — удобно для таблиц:
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.
Округлить само значение
Формат меняет только вывод, переменная остаётся прежней. Если округлённое значение нужно для дальнейших расчётов:
program RoundValue;
var
x: real;
begin
x := 2.71828;
x := round(x * 100) / 100;
writeln(x:0:2);
end.2.72round(x * 100) даёт 272, деление на 100 возвращает 2.72. В PascalABC.NET то же делает функция Round(x, 2), но в Free Pascal её нет — там используйте запись выше.
Подводные камни
- Запятая вместо точки. Pascal выводит дробную часть через точку. Запятую можно получить только через строку: переведите число в строку и замените символ.
- Ровно посередине. Числа вроде 2.675 в памяти хранятся приближённо (2.67499999…), поэтому при выводе с двумя знаками может получиться и 2.67, и 2.68 — в разных средах по-разному. Для денег считайте в копейках целыми числами.
- Отрицательный ноль. Очень маленькое отрицательное число, например
-0.001, с форматом:0:2иногда выводится как-0.00.