Я подробно остановлюсь на том, что Адел уже кратко ответила. Вы можете вписать эти числа в двойной тип данных. Проблема в том, что когда вычисляются числа, будут ли они рассчитаны правильно? Ответ - нет, они не будут. Как правило, это не такая большая проблема, если вы учитываете это с помощью дельты, т. Е. Ваша свобода в предположении, эквивалентно ли двойное значение другому двойному значению. Но для вычислений с точными числами, таких как денежные вычисления, вы должны использовать тип, такой как BigDecimal, для хранения значений.
Когда у вас есть этот номер:
1,23445
как двойной, это может выглядеть как 1.23445
но на самом деле это может быть что-то вроде
1,234450000003400345543034
Когда вы выполняете несколько вычислений для таких чисел, как правило, эти дополнительные места не имеют значения - однако со временем они будут давать неточные результаты. В BigDecimal, когда число указывается как его строковое представление, оно равно этому числу - оно не страдает от "почти такой же хорошей" проблемы, как двойные числа.
Я обновляю этот ответ, чтобы включить некоторые заметки из двойного конструктора BigDecimal, найденного по этому адресу .
Результаты этого конструктора могут быть
несколько непредсказуемо. Можно
Предположим, что написание нового
BigDecimal (0.1) в Java создает
BigDecimal, который точно равен
0,1 (немасштабированное значение 1 со шкалой 1), но на самом деле оно равно
в
0,1000000000000000055511151231257827021181583404541015625. Это потому, что 0,1 не может быть
представлен точно как двойной (или,
в этом отношении, как двоичная дробь
любой конечной длины). Таким образом, значение
что передается в
конструктор не совсем равен
0,1, несмотря на внешний вид.
Конструктор String, с другой
стороны, вполне предсказуемы
написание новых BigDecimal ("0.1") создает
BigDecimal, который точно равен
0,1, как и следовало ожидать. Поэтому, как правило, рекомендуется
Строковый конструктор будет использоваться в
предпочтение этому.
Когда двойник должен быть использован в качестве источника
для BigDecimal, обратите внимание, что это
конструктор предоставляет точный
преобразование; это не дает то же самое
в результате преобразования двойного в
Строка с использованием
Double.toString (double) метод и
затем с помощью BigDecimal (String)
конструктор. Чтобы получить этот результат, используйте
метод static valueOf (double).