2010-02-01 35 views
1

我使用GWT 2.0,當我嘗試使用NumberFormat的格式化雙重的不按預期的結果:高精度GWT的NumberFormat問題小數

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

格式的字符串:0.02147484

由於你可以看到格式化的值是錯誤的(這可以在gwt展示中看到)。這是否與我使用的自定義格式有關(#。########)?或者這是GWT格式化程序中的錯誤? 如果這是一個錯誤,有人找到了解決方法? 謝謝。

+0

你嘗試'雙d = 0.256281093911D;'。它可以幫助您查找是否是一個字符串來加倍問題,或只是格式。 – helios 2010-02-01 19:39:15

+0

我試過了,但仍然是同樣的問題。 – 2010-02-01 19:42:44

回答

1

link text 你可以嘗試NumberFormat.getDecimalFormat。另外,它可能與瀏覽器的區域設置和/或小數分隔符有關。

1

Double以二進制格式存儲在java中。在大多數情況下,使用二進制浮點值不是您想要的 - 二進制和十進制浮點數之間的轉換會導致舍入錯誤。

嘗試「BigDecimal」,它以DECIMAL格式存儲浮點值,而不是二進制格式。

示例代碼:

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