我目前正在为项目使用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);
答案 0 :(得分:4)
在你的师中,你提供了一个MathContext
参数,它控制你的师将使用多少重要数字。您的结果表明您是
MathContext
; OR MathContext
,但是向下舍入的舍入模式。也就是说,你只会分成一两个有效数字。
您需要创建一个不同的MathContext
对象,其精度值更高,例如,
mc = new MathContext(10);
如果你想分成10位有效数字。