簡體   English   中英

為什么BigDecimal.divide()給我錯誤的答案?

[英]Why is BigDecimal.divide() giving me a wrong answer?

我目前在為一個項目使用BigDecimal類型,並且它們的工作非常出色。

除了非常大的值外,每個鴻溝似乎給了我一個異常的答案。

這是我的代碼的摘錄:

System.out.print("a: "+a+", b: "+b);
i = a.divide(b, mc).setScale(0, RoundingMode.FLOOR);
System.out.println(", result: "+i);

我得到的打印輸出如下:

a: 100000000000106, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000022, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000036, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000

當我將這三個除數插入計算器時,它們各自給了我大約70710678118704。但是BigDecimal除法給了我什至7000000000000。

這與我舍入不正確有關嗎?

注意:所有類型(a,b和i)都是BigDecimals

編輯:添加了mc的實例化:

MathContext mc = new MathContext(1, RoundingMode.DOWN);

在您的部門中,您提供了MathContext參數,該參數控制您的部門將使用多少有效數字。 您的結果表明您是EITHER

  • 使用MathContext的精度為1; 要么
  • 使用MathContext的精度為2,但采用四舍五入的舍入模式。

也就是說,您只會划分成一兩個重要數字。

您需要創建一個不同的MathContext對象,以提高精度,例如,

mc = new MathContext(10);

如果要除以10位有效數字。

暫無
暫無

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

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