Кода целое значение присваивается вещественной переменной, оно автоматически преобразуется в вещественный тип и никакие функции для этого не требуются. Такое преобразование типов называется неявным. Так, если переменную объявить как real, а затем присвоить ей целое число 5, то последнее автоматически преобразуется в 5.0.
Обратного неявного преобразования нет: будет ошибкой пытаться присваивать переменной целого типа вещественный результат.
Перед присваиванием целой переменной вещественного значения это значение следует преобразовать к целому типу отбрасыванием дробной части или округлением. Для этих целей служат функции trunc и round соответственно.
trunc(вещественное_выражение) – преобразует вещественное в целый тип, отбрасывая дробную часть.
trunc(3.1), trunc(3.8). Результат: 3, 3
trunc(-3.1), trunc(-3.8). Результат: -3, -3
round(вещественное_выражение) – преобразует вещественное в целый тип, округляя до ближайшего целого.
round(3.1), round(3.8). Результат: 3, 4
round(-3.1), round(-3.8). Результат: -3, -4
Здесь возможны недоразумения. Пусть вещественная переменная x имеет значение 3.499999. Если это значение напечатать с использованием оператора write(x:8:5), то получится 3.50000, в то время как write(round(x)) даст 3, а не 4. Это затруднение можно обойти при помощи небольшой поправки, например write(round(x + 0.000001)) (в предположении, что значение переменной x заведомо положительное).
Применять функции trunc и round к параметрам целого типа нельзя. Например, будут ошибкой такие выражения, как trunc(3) или round(3).
Комментарии
Объясните, пожалуйста, что
Объясните, пожалуйста, что обозначает параметр "x:5:8" в операторе write(x:8:5).
write(x) - это понятно, но откуда взялось вот это ":5:8"?:)
Меня это интересует как общий, а не конкретно-частный вопрос, поэтому можете скинуть ссылку на тему, где этот аспект описывается - а то запутался, сам "догнать" не могу:)
https://pas1.ru/inputoutput Пе
https://pas1.ru/inputoutput
Первое число - количество знакомест, второе - количество знаков после запятой.