real в паскале выводит кучу цифр после запятой, как округлить до 2 знаков?
Считаю среднее арифметическое, ответ real. А паскаль выводит что-то типа 4.66666666666667 или вообще 4.6E+00, мне же надо нормально, 4.67. Как заставить его выводить две цифры после точки?
var
a, b, c: integer;
sr: real;
begin
a := 4; b := 5; c := 5;
sr := (a + b + c) / 3;
writeln(sr);
end.
2 ответа
Для real используй форматный вывод — после переменной через двоеточие указываешь ширину и сколько знаков после точки: sr:0:2. Двойка как раз = 2 знака после запятой:
var
a, b, c: integer;
sr: real;
begin
a := 4; b := 5; c := 5;
sr := (a + b + c) / 3;
writeln(sr:0:2);
end.
Теперь выведет ровно 4.67.
Разбор sr:0:2:
- первое число (0) — общая ширина поля. 0 значит 'сколько надо, без лишних пробелов'.
- второе число (2) — сколько цифр после точки. Хочешь 3 знака — пиши
:0:3.
То страшное 4.6E+00 — это научная запись, она вылазит как раз без форматирования. С :0:2 её не будет.
Кстати, у тебя верно: деление / всегда даёт real, даже если делишь целые. Поэтому sr и должна быть real, integer тут не подойдёт.
да, :0:2 спасает жизнь, особенно когда выводишь деньги или среднее. на проверочных всегда прошу нормальный вид числа, иначе учитель занижает за 'некрасивый вывод')