簡體   English   中英

四舍五入到小數點后兩位總是返回0.0

[英]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。 值示例:

  • 5.957818181818184E-16 0.0
  • 3.927272727272729E-18 0.0
  • 3.1250000000000005E-16 0.0
  • 1.6000000000000006E-19 0.0

我在這里想念什么?

謝謝!

您要在其中測試的四個值四舍五入為0.0!

5.957818181818184E-16等於5.95... * 10^(-16)等於0.000...0595...在第一個非零數字前面有16個零。 其他值也類似。 您熟悉科學記法嗎?

您引用的所有示例都是非常非常小的數字。 如果將它們四舍五入到兩個位置,則結果為零。 這就是為什么要獲得結果的原因。 他們是正確的。 具有科學計數法的負指數告訴我們。

例如, 2E-10.2 您可以寫出數字,然后將小數點向左移動指數中給出的次數(如果指數為正數,則向右移動小數點)。 所以你

5.957818181818184E-16

是真的:

0.0000000000000005957818181818184

...四舍五入為0.00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM