我正在使用帶有HALF_UP舍入模式的DecimalFormat,並且我有一個escenery,其中的工作不正常,我不知道爲什麼。Java DecimalFormat HALF_UP舍入錯誤
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.HALF_UP);
float tmp = (float) (0.5 * 1.05);
df.format(tmp);
float mul = Float.parseFloat(df.format(tmp));
變量值mul
我希望有0.53的值,我收到了0.52的值。
我正在使用Java 1.8.0_131。
解決的最終代碼
BigDecimal mul = new BigDecimal(0.5).multiply(new igDecimal(1.05));
mul = mul.setScale(2, RoundingMode.HALF_UP);
System.out.println(mul);
Thank you for your comment,but I round rounding as HALF_UP must works「Rounding mode to round to」nearest neighbor「,除非兩個鄰居是等距離的,在這種情況下,四捨五入。「[Oracle Documentation](https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html) –
'float'和'double'無法精確地存儲值...請參閱:https ://stackoverflow.com/q/3413448/4899193 –
This works' System.out.println(df.format(0.5 * 1.05));' - 當然雙打 –