GWT NumberFormat проблемы с высокой точностью десятичных - PullRequest
1 голос
/ 01 февраля 2010

Я использую GWT 2.0, и когда я пытаюсь использовать NumberFormat для форматирования Double, результаты не такие, как ожидалось:

NumberFormat format = NumberFormat.getFormat( "#.########" );
Double d = new Double("0.256281093911");
format.format(d);

отформатированная строка: 0.02147484

Как видите, отформатированное значение неверно (это можно увидеть на витрине gwt). Это связано с тем, какой формат я использую (#. ########)? или это ошибка в форматере GWT? Если это ошибка, кто-то нашел решение? Спасибо.

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Double хранится в двоичном формате в Java в целом. Работа с двоичными значениями с плавающей точкой в ​​большинстве случаев не то, что вам нужно - преобразование между двоичными и десятичными числами с плавающей точкой вызывает ошибки округления.

Попробуйте "BigDecimal", который хранит значения с плавающей точкой в ​​формате DECIMAL, а не в двоичном формате.

Пример кода:

NumberFormat format = NumberFormat.getFormat("#.########");
format.format(new BigDecimal("0.256281093911"));
1 голос
/ 04 февраля 2010

текст ссылки Вы можете попробовать NumberFormat.getDecimalFormat. Кроме того, это может иметь отношение к локали вашего браузера и / или его десятичному разделителю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...