Pascal- Как преобразовать переменную Real в Integer

Пишу задачу на паскале.

Все ок, только мой результат не тот.

Я суммирую некоторые числа

Пример: 2,3 + 3,4+ 3,3 = 9

Но вывод показывает: 9.000000 + EEE или что-то в этом роде.

Итак, как преобразовать, чтобы было только 9, а не эта НАСТОЯЩАЯ переменная.


person user2456556    schedule 05.06.2013    source источник


Ответы (4)


Чтобы на самом деле преобразовать:

var
  i: integer;
...
  i := round(floatVar);

Чтобы вывести только целую часть:

writeln(floatVar:9:0);
person 500 - Internal Server Error    schedule 05.06.2013
comment
Спасибо, но в первой части дублируется идентификатор. - person user2456556; 05.06.2013

Чтобы показать красивый вывод на экране, вы можете использовать что-то вроде этого:

Writeln(result:0:2);

Результат на экране будет таким:

9.00

Что это значит, спросит кто-нибудь? Ну, первая цифра 0 означает, насколько широко поле. если вы скажете, что это 0, то Паскаль напишет это в самой левой части экрана. Если бы вы сказали writeln(result:5:2), результат был бы таким:

   9.00

Другими словами, я бы напечатал форму с правой стороны и оставил для этого 5 символов.

Второй номер 2 в этом примере означает, что вы хотите, чтобы результат был напечатан с двумя десятичными знаками. Вы можете поместить его, только если хотите вывести на экран реальное, одинарное, двойное, расширенное и т. д. значение. Вы можете округлить до любого числа десятичных знаков, и если вы сделаете writeln(result:0:0), вы получите вывод:

9

Если вы печатаете целое число и хотите иметь некоторую длину поля, давайте посадим 5, вы бы сделали: writeln(int:5). Если вы добавите :2 в конец, вы получите ошибку времени компиляции.

Это все также работает для чего-то вроде этого: writeln(5/3.5+sqrt(3):0:3),

Вы должны знать, что это не округляет саму переменную, а просто форматирует вывод. Это также законно:

program test;
var
    a:real;
    n,m:integer;
begin
    readln(a,m,n);
    writeln(a:m:n);
end.

Что я сделал здесь, так это спросил пользователя, сколько знаков после запятой и с какой длиной поля он хочет написать введенное число a. Это может быть полезно, поэтому я указываю на это. Спасибо за чтение. надеюсь я помог

person Đumić Branislav    schedule 19.09.2017

Рассмотрим это довольно простое уравнение:

3.5 + 2.5

Что вы ожидаете? 6, да? Давайте попробуем этот код

write(3.5 + 2.5);

К сожалению, это число с плавающей запятой, поэтому оно будет давать число, представленное научным способом:

6.00000000000E+00

или 6,0000000000 x 100 или 6 x 10o. Как бы то ни было, вас волнует только 6, кому нужно это странное бесполезное длинное число? Итак, идея состоит в том, чтобы отсечь десятичную часть и вывести в консоль только целую часть, что можно сделать с помощью этой строки кода:

write(3.5 + 2.5 : 0 : 0);

Хорошо, теперь он выводит красивое число, как и ожидалось.

6

Вроде бы проблема решена, а вы говорите, что:

Я суммирую некоторые числа

Пример: 2,3 + 3,4+ 3,3 = 9

Ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо?! Здесь возникает проблема: как, по-вашему, должно получиться это уравнение?

3.6 + 2.5

Должно быть 6.1, верно? Давайте попробуем это с отработанной строкой кода:

write(3.6 + 2.5 : 0 : 0);

А выход такой...

6

Неожиданно, правда? Итак, как насчет округления до нескольких знаков после запятой, например 1?

write(3.5 + 2.5 : 0 : 1);
write(3.6 + 2.5 : 0 : 1);

Затем 3.5 + 2.5 = 6.0 и 3.6 + 2.5 = 6.1. Но 6.0 может показаться довольно длинным, так как же заставить его выводить 6 для 6.0 и 6.1 для 6.1?

На самом деле, вы не можете заставить программу автоматически определять, содержит ли реальная переменная целочисленное значение, потому что способ хранения реальной переменной полностью отличается от целочисленной переменной (насколько они отличаются, обратитесь в Google; но вы можете это сделать вручную, создав функцию для выполнения этой работы).

Итак, мое решение состоит в том, чтобы упростить вывод, округлив вывод до нескольких знаков после запятой, и все.

person JamieNguyen    schedule 22.11.2017

Вы можете преобразовать в string, получить часть int, преобразовать в число int!

Или с Float по Str, чем с Str по Int:

nPage := StrToInt(FloatToStr(Int(nReg / nTPages))) + 1;
person ANTONIO FERREIRA    schedule 26.03.2018