具有高精度小数的GWT NumberFormat问题

时间:2010-02-01 19:35:14

标签: gwt string-formatting number-formatting

我正在使用GWT 2.0,当我尝试使用NumberFormat格式化Double时,结果不符合预期:

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

格式化字符串:0.02147484

正如您所看到的,格式化的值是错误的(这可以在gwt展示中看到)。这是否与我正在使用的自定义格式有关(#。########)?或者这是GWT格式化程序中的错误? 如果这是一个错误,有人找到了解决方法吗? 感谢。

2 个答案:

答案 0 :(得分:1)

link text 你可以试试NumberFormat.getDecimalFormat。此外,它可能与您的浏览器的区域设置和/或它的小数分隔符有关。

答案 1 :(得分:1)

Double通常以二进制格式存储在java中。在大多数情况下,使用二进制浮点值不是您想要的 - 二进制和十进制浮点数之间的转换会导致舍入错误。

尝试“BigDecimal”,它以DECIMAL格式存储浮点值,而不是二进制格式。

示例代码:

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