2017-06-02 35 views
-1

我需要將float乘以100以便將轉換爲cents。我遇到的問題是,大數值的計算不正確。針對浮點符號的錯誤是什麼?

例如:

String aa = "1000009.00"; 
aa = aa.replaceAll(",", "."); 
float bb = Float.parseFloat(aa); 
bb=Math.round(bb*100); 
System.out.println(bb); 

我所得到的是:1.00000896E8

所以我知道這是不是因爲float在Java中的工作方式。 我已經搜索了一個答案,但人們總是說「使用Math.round()」這不適合我。

我該怎麼做才能防止這種情況發生?

+1

使用'double',而不是'float'。 – Yahya

+1

或者更好的使用'BigDecimal'而不是'float'。 – Henry

+0

'float'具有[6至9位重要精度的十進制數字](https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32),您的號碼「1000009.00」爲9數字長。你已經超過了'float'的精度。改用「double」(15-17位)或「BigDecimal」(無限精度)。 – Andreas

回答

0

(如果您希望以非常大的數字,工作或BigDecimal)您可以使用double更高精度。

String aa = "1000009.00"; 
double bb = Double.parseDouble(aa); 
bb=Math.round(bb*100); 
System.out.printf("%.2f", bb); // it prints only two digits after the decimal point 

輸出

100000900.00 
+0

thx的工作! – MrGatzi

0

可以使用BigDecimal::multiply例如:

String aa = "1000009.00"; 
aa = aa.replaceAll(",", "."); 
BigDecimal fullValue = new BigDecimal(aa); 

System.out.println("full value = " + fullValue.multiply(new BigDecimal(100))); 

輸出

full value = 100000900.00 
+0

爲什麼這個回票? –

+1

如果你使用'BigDecimal',你應該從'aa'而不是'bb'創建它,然後使用'movePointRight(2)'得到正確答案'100000900'。 – Andreas

+0

謝謝@Andreas我現在沒有正確閱讀問題檢查我的答案? –