[英]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.