Java 为什么BigDecimal.divide()给了我一个错误的答案?
我目前正在为一个项目使用BigDecimal类型,它们工作得很好 除了非常大的值之外,每个除法似乎都给了我一个异常圆且不正确的答案 以下是我的代码摘录:Java 为什么BigDecimal.divide()给了我一个错误的答案?,java,rounding,bigdecimal,Java,Rounding,Bigdecimal,我目前正在为一个项目使用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.4142135623
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。然而,大的十进制除法给了我一个7000000000000的偶数
这跟我有关吗
注:所有类型(a、b和i)都是大小数
编辑:添加了mc的实例化:
MathContext mc = new MathContext(1, RoundingMode.DOWN);
在您的部门中,您提供了一个
MathContext
参数,该参数控制您的部门将使用多少有效数字。你的结果表明你是
- 使用精度为1的
;或MathContext
- 使用精度为2的
,但使用向下舍入的舍入模式MathContext
MathContext
对象,例如,具有更高的精度值
mc = new MathContext(10);
如果希望除法为10个有效数字。在除法中,您提供了一个
MathContext
参数,该参数控制除法将使用多少有效数字。你的结果表明你是
- 使用精度为1的
;或MathContext
- 使用精度为2的
,但使用向下舍入的舍入模式MathContext
MathContext
对象,例如,具有更高的精度值
mc = new MathContext(10);
如果您想将分割为10位有效数字。请显示您初始化
mc
的行。开始了。对不起,我错过了。这就是问题所在吗?请显示您初始化mc
的行。好了。对不起,我错过了。这是怎么回事?这正是我的问题。非常感谢。只要stackoverflow允许我就接受。这正是我的问题。非常感谢。只要我同意,我就接受。