2011-12-13 23 views
0

我正在研究需要多維數據集的程序。長話短說,我需要將數字與字符串進行比較,所以我需要擺脫double轉換爲字符串時的小數位。爲此,我使用了Math.round並將其保存爲long。這適用於相對正常的數字,但數字可以達到999,999。Java Math.pow問題

我使用了275393(給定的測試編號,所以我假設它對於我正在處理的問題必須是正確的),計算器和計算機都不會得到正確的答案。正確的答案應該在結果中包含123457,但計算器有12346(我認爲這只是四捨五入,因爲它在此之後停止列出數字),並且計算機有123456(計算機在此點後停止列出數字)。四捨五入給它的問題(不應該因爲我很確定它只能到十分之一的位置,但誰知道)?或者是別的什麼?

+0

嘗試使用[BigDecimal](http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html)而不是double。 – CoolBeans

回答

6

Math.pow()需要兩個double s並返回doubledouble沒有足夠的精度來表示275393 = 20886164356123457(確切)。

解決方法是使用BigInteger.pow()

1

我需要將數字與字符串進行比較,所以我需要擺脫double轉換爲字符串時的小數位。

反過來做。將String轉換爲數字,然後將其與double(小浮點數的不準確二進制表示計算在內)進行比較。