【发布时间】:2019-04-14 22:44:24
【问题描述】:
我正在减去两个 bigDecimal 数字。进入减法方法,它们都具有非零精度,但结果精度= 0。
据我所知,精度为 0 的 bigDecimal 数是不可能的。即使 0 也有 1 的精度。
精度是未缩放值的位数。例如,对于数字 123.45,返回的精度为 5。
(另见BigDecimal, precision and scale)。
相关区域:
BigDecimal test = (centerHP.getReal().subtract(inverseScale));
centerHP.getReal() 返回从该行创建的 bigDecimal
new BigDecimal(Double.toString(center.getReal()))
对于上下文center.real = -0.79,它是一个double。
原来如此
new BigDecimal("-0.79")
inverseScale 只是 1
double scale = 1;
BigDecimal inverseScale = (BigDecimal.ONE.divide(new BigDecimal(Double.toString(scale))));
我希望 test 是一个值为 -1.79 的 bigDecimal,int 表示应该是 -179,精度为 3,小数位数为 2。但是,紧随 BigDecimal 中的减法方法中的加法运算类,我的价值观如下:
并且测试等于:
请注意,所有其他值都是正确的,只是精度似乎是错误的。
【问题讨论】:
-
您是否尝试在有问题的对象上调用
precision()方法?我认为调试器中显示的私有字段的值没有任何保证。
标签: java bigdecimal