Почему числа с плавающей запятой имеют трейлинг .0, когда это точно целое число? - PullRequest
2 голосов
/ 23 октября 2009

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

Я спрашиваю, почему 123d становится 123.0?

64-разрядное число с плавающей запятой IEEE может точно представлять целые числа от 0 до 2 ^ 52, так что это не потеря точности, а решение при реализации Double.toString ().

Мой вопрос: почему они приняли это решение так же, как и они? Почему они не просто напечатали 123?

Ответы [ 3 ]

8 голосов
/ 23 октября 2009

Помимо прочего, это приводит к ясности представления - пользователи часто путаются, когда то, что кажется целочисленным значением, внезапно имеет длинный след цифр после десятичного знака после простой арифметической операции.

5 голосов
/ 23 октября 2009

Таким образом, было бы легче увидеть, что это на самом деле двойное число, а не целое число, я думаю:).

0 голосов
/ 23 октября 2009

toString - это особый метод. Это не означает «пользовательская строка отображения» на любом отрезке воображения (хотя часто случается так, что он совпадает, как в методе «String's toString»)

Это действительно для разработчиков, чтобы иметь возможность мгновенно уловить, что объект (в первую очередь, как отладочный вывод).

Для того, чтобы что-либо было распечатано пользователем, оно все равно должно обрабатываться через форматтер, чтобы обеспечить правильный максимальный размер, количество десятичных знаков и десятичный индикатор (. Или,).

В Java-коде 0.0 автоматически приводится к двойному значению, поэтому вполне логично, что двойное значение будет напечатано как 0.0 - это означает «это двойное число». Я немного удивлен, что это не заканчивается на «f» или «d», но это на самом деле очень раздражает, потому что toString для int действительно очень полезно, и постоянно следовать за ним с «i» было бы все выключены.

...