[英]Rounding double to 2 decimal places returns always 0.0
我嘗試將雙精度值四舍五入到小數點后兩位,但我總是得到0.0。 我嘗試了三種方法。
第一:
System.out.println(Math.round(reward*100.0)/100.0);
第二:
System.out.println(String.valueOf(round(reward, 2)));
private double round(double value, int places)
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}
第三:
DecimalFormat df = new DecimalFormat("###.##");
System.out.println(df.format(reward));
每次我只得到0.0。 值示例:
我在這里想念什么?
謝謝!
您要在其中測試的四個值應四舍五入為0.0!
5.957818181818184E-16
等於5.95... * 10^(-16)
等於0.000...0595...
在第一個非零數字前面有16個零。 其他值也類似。 您熟悉科學記法嗎?
您引用的所有示例都是非常非常小的數字。 如果將它們四舍五入到兩個位置,則結果為零。 這就是為什么要獲得結果的原因。 他們是正確的。 具有科學計數法的負指數告訴我們。
例如, 2E-1
是0.2
。 您可以寫出數字,然后將小數點向左移動指數中給出的次數(如果指數為正數,則向右移動小數點)。 所以你
5.957818181818184E-16
是真的:
0.0000000000000005957818181818184
...四舍五入為0.00
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.