为什么BigDecimal.divide()给我一个错误的答案?

时间:2014-05-26 01:07:38

标签: 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.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000022, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000036, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000

当我将这三个分数插入一个计算器时,它们每个都给我大约70710678118704。然而,BigDecimal鸿沟给了我一个甚至70000000000000。

这与我的舍入错误有关吗?

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

编辑:添加了mc:

的实例化
MathContext mc = new MathContext(1, RoundingMode.DOWN);

1 个答案:

答案 0 :(得分:4)

在你的师中,你提供了一个MathContext参数,它控制你的师将使用多少重要数字。您的结果表明您是

  • 使用精度为1的MathContext; OR
  • 使用精度为2的MathContext,但是向下舍入的舍入模式。

也就是说,你只会分成一两个有效数字。

您需要创建一个不同的MathContext对象,其精度值更高,例如,

mc = new MathContext(10);

如果你想分成10位有效数字。