Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Зачем при записи чисел в конце добавляют .0?

Часто в коде программ числа записываются в виде цифры с .0 на конце. Например:
C: double s = 1.0 / 6.0;
Delphi: var d: Single; begin d := 16.0 + 1.0; end;
JS: var t = 90.0;
Возможны примеры и на других языках, но для начала предлагаю ограничиться этими тремя
Какой смысл несет добавление .0 в данных случаях? В каких случаях .0 можно опускать, а в каких он меняет логику поведения программы?


Ответ

Если говорить в общем, то добавление .0 к числу, изменяет его тип и превращает его из целого, в дробное (число с плавающей точкой). Такое изменение типа числа влияет на то, как оно будет храниться в памяти и на то, как и какие операции с ним могут выполняться.
В JS добавление .0 абсолютно лишено всякого смысла, т.к. там все числа изначально являются дробными.
В Delphi так же не возникает необходимости вручную приводить целые числа к дробным, т.к. компилятор замечательно справляется с этим самостоятельно, там где это нужно. Операция деления двух целых всегда возвращает дробное число и его невозможно по ошибке присвоить целому. Для особых случаев, когда надо выполнить целочисленное деление, есть специальный оператор div
А вот в Си и некоторых других языках, и для целочисленного, и для обычного деления используется один и тот же оператор деления / который ведёт себя по разному, в зависимости от типа операндов:
если оба операнда целые, то и в результате деления будет целое (целочисленное деление): double i = 5 / 2; даст 2.0 (дробная часть результата операции отбрасывается, получается целое число, которое затем приводится к целевому типу double). если хоть один из операндов является дробным, то и результат будет дробным: double i = 5 / 2.0; даст 2.5.
В Си, вместо .0 перед числом можно указывать тип числа с плавающей точкой (float/double), т.е. выполнять приведение типа: double i = 5 / (double) 2; такая конструкция используется, если операнд не число, а переменная целочисленного типа:
int k = 2; double i = 5 / (double) k; // --> i = 2.5

Комментариев нет:

Отправить комментарий