我有两个双重值
double a = 1.07522;
double b = 1.0752;
和舍入乘数值
public static final double ROUND_MULTIPLIER = 100000.0;
所以总是应该有5个小数位 .
我需要减去两个double值并得到 a - b = 0.00002
的结果 .
如何使用 ROUND_MULTIPLIER
执行此操作?
我尝试使用BigDecimal
BigDecimal.valueOf(a).subtract(BigDecimal.valueOf(b)).round(new MathContext((int)ROUND_MULTIPLIER));
但它并不总是有效,有时会返回2E-16,当尝试添加第二个值时返回奇怪的值,如下所示
BigDecimal.valueOf(a).subtract(BigDecimal.valueOf(b + 0.00002)).round(new MathContext((int)ROUND_MULTIPLIER));
我需要使用 ROUND_MULTIPLIER
.
4 回答
我不明白为什么你必须使用ROUND_MULTIPLYER以及它存在的确切原因是什么,所以我只能猜测 .
强制代码使用ROUND_MULTIPLYER:
这个的输出是
那是你要的吗?代码绝对是优化的对象,但我让你这样做;-)
使用bigDEcimal并设置比例,给出您需要的小数位数
BigDecimal是要走的路,但是如果将ROUND_MULTIPLIER转换为int,为什么ROUND_MULTIPLIER是一个double值 . 也许这就是你从哪里得到你的问题?用int乘法器给它一个旋转:)
编辑:使用
setScale()
设置一个合适的舍入模式通常是一个更好的选择,但你坚持使用乘数,对吧?