Как ограничить количество знаков после запятой в паскале
Перейти к содержимому

Как ограничить количество знаков после запятой в паскале

  • автор:

Функции trunc, round в Pascal.

Для того чтобы в Паскаль можно было оперировать не только целыми числами, но и дробными существуют вещественные типы данных. Один из таких типов называется Real. В этом уроке мы рассмотрим 2 функции, которые производятся над дробными числами. Это функция Trunc, которая округляет дробное число до целого, отбрасывая дробную часть и функция Round, которая округляет дробное число до ближайшего целого.

В строке №3 и №4 мы указали сразу 2 типа переменных. Для переменных N и K мы указали тип данных Integer, т.е. эти переменные могут принимать только целые значения в диапазоне от -32768 до 32767. Для переменных A и B мы указываем тип данных Real. Это вещественный тип данных, применяемый для переменных, которые могут принимать дробные значения в диапазоне от 2.9*10 -39 до 1.7*10 38 . Обратите внимание, что переменные разных типов указываются в разделе описания переменных через точку с запятой.

В строке №7 присваиваем переменной «N» значение «4».

В строке №8 присваиваем переменной «A» значение 3,6. Учтите, что при записи дробного числа в программе между целой и дробной частью ставится точка (а не запятая как при обычной записи).

Строка №9. Здесь переменной вещественного типа B мы присваиваем значение переменной целого типа N. Фактически мы присвоили переменной «B» значение 4. Таким образом, получается, что в переменную типа Real можно записать значение переменной Integer (т.е. целое число). А вот записать вещественное число в переменную Integer нельзя. Если нам необходимо это сделать, то мы должны определить, что делать с дробной частью. И здесь есть 2 варианта.

Строка №11. Функция trunk говорит нам о том, что при записи вещественного числа A в переменную целого типа K, дробная часть будет отбрасываться. Таким образом, получится, что переменной N будет присвоено значение не «3.6» , а просто «3».

Строка №13. Функция Round говорит нам о том, что при записи вещественного числа A в переменную целого типа K , число будет округляться до ближайшего целого. Таким образом, получится, что переменной K будет присвоено значение не «3.6» , а «4».

trunc round

trunc round.

trunc round..

Обратите внимание, на формат вывода на экран вещественных чисел. Паскаль выводит дробные числа на экран в виде числа с плавающей точкой (экспоненциальная форма). Эта запись является неудобной, поэтому для приведения ее к нормальному виду прибегают к форматированию. Для форматирования нужно в строке №10 (вывод на экран) сделать такие изменения: writeln(‘B=’,B:2:1). После переменной B мы через двоеточие записываем 2 числа. Первое число (в нашем случае «2») показывает, сколько всего знаков должно выводиться на экран, второе число («1») показывает количество знаков после запятой.
После внесения этих изменений в программу мы получим следующий результат:

Как округлить число до 2-3 знаков после запятой на «pascal.A.B.C» если выдается ошибка?

делал прогу для вычисления дискриминанта на pascal ,так вот,при вычисление x1 и x2 выдает ошибку:Ошибка времени выполнения: Значение было недопустимо малым или недопустимо большим для Int32.
86f9446b3ca64e95b53b0cc0acee41a5.jpg
Я так понял что большей диапазон чисел и в int32 не помещаться. Как это решить?

  • Вопрос задан более трёх лет назад
  • 14146 просмотров
  • Facebook
  • Вконтакте
  • Twitter

b8072b4d9df84b0fa0f88f7dd18da9ec.jpg

  • Facebook
  • Вконтакте
  • Twitter

SagePtr

  • Facebook
  • Вконтакте
  • Twitter

Rou1997

  • Facebook
  • Вконтакте
  • Twitter

Обычно в учебных работах (и даже не в учебных — именно так работает Excel) не округляют, а выводят с округлением.

Каких-то продвинутых средств округления, которые округляют дробное число до i-го знака я не вижу.
Кроме того, вы подсказали, с каким Паскалем вы имеете дело, я загрузил его и повторил прошлую ошибку — такая ошибка происходит именно что из-за округления NaN.

Процедура Str

Процедура Str в Паскале преобразует число или перечисление в строку. Синтаксис:

procedure Str(var X : TNumericType; var S : string);

Процедура Str возвращает строку, представляющую значение X , которое может быть любым числовым или перечисляемым типом. Фактическое объявление процедуры Str не соответствует синтаксису Паскаль и должно быть

где необязательные спецификаторы NumPlaces и Decimals управляют форматированием строки:

  • NumPlaces задаёт общую ширину строки
  • Decimals задаёт количество десятичных знаков после символа десятичного разделителя

Процедуру Str также можно использовать для преобразования значения перечисляемого типа в строковое представление объявленного перечисления. Это означает, что будет работать следующее:

Эта программа выведет на экран слово One . То же самое сделает и следующая программа:

Преобразование числа может быть выполнено, например, так:

Если вы хотите преобразовать вещественное число и задать определённое количество знаков после запятой, то это можно сделать так:

Примеры вывода показаны на рисунке:

Использование процедуры Str

Если хотите, можете с помощью процедуры Str создать собственную функцию преобразования вещественных чисел в строку с заданным количеством знаков после запятой. Функция может быть, например, такой:

Здесь с помощью спецификатора Decimals мы задаём количество знаков после запятой. В программе функцию можно использовать так:

Writeln(MyFloatToStr(Pi*2, 3));

При этом на экран будет выведена строка 6.283

Спецификатор NumPlaces тоже может пригодиться, например, при выводе таблиц. С его помощью мы можем задать одинаковую ширину строки, и на экране вывод будет занимать всегда одинаковое заданное количество знакомест, независимо от того, сколько цифр у нас в числе. Пример:

Ограничение вывода в Pascal

Оператор вывода позволяет задать ширину поля вывода для каждого элемента списка вывода. В этом случае элемент списка вывода имеет вид a:x, где a — значение переменной или строка, x — выражение либо константа целого типа. Если выводимое значение занимает в поле вывода меньше позиций, чем x, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля x, то для этого значения будет отведено необходимое количество позиций.

Для величин действительного типа элемент списка вывода может иметь видa:x:y, где a — переменная или выражение действительного типа, x — ширина поля вывода, y — число цифр дробной части выводимого значения. x и y — выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой.
Пример записи операторов вывода:

var a, b: Real;
p,q:Integer;

begin
… // Часть программы, в которой выполняются операции с переменными
WriteLn(a, b:10:2); //10 — значение ширины поля ввода; 2 — число цифр после запятой
WriteLn(p, q:8); // 8 — количество выводимых позиций
end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *