我在Java中使用双打进行了一系列计算,总计应该加起来为1.0。偶尔,在Java中总和有点偏差。我在Excel中执行计算,它们确实加起来为1.0。我怀疑这与一些双舍入错误有关。令我困惑的是它在Excel中有效。知道我能做些什么来解决这个问题吗?
我在Java中有以下代码:
double d1 = 0.979;
double d2 = 3;
double d3 = 21;
double d4 = d1 * d2 / d3;
System.out.println("d4 " + d4);
打印0.13985714285714285。在Excel中,如果我进行相同的计算(=C14*D14/E14)
,其中C14是d1,D14是d2,E14是d3,我得到0.1398571428571430000。 Excel是否正确,因为它是四舍五入的?
感谢。
答案 0 :(得分:0)
尝试使用BigDecimals。虽然Java double不是使用小数部分的精确方法,但它仍然非常准确,当然比Excel更准确。
使用BigDecimal,您可以自己控制舍入,也可以使用小数部分而不是二进制分数,如果您习惯使用十进制数,则可以获得更直观的结果。
public static void main(String[] args) {
BigDecimal d1 = new BigDecimal("0.979");
BigDecimal d2 = new BigDecimal("3");
BigDecimal d3 = new BigDecimal("21");
BigDecimal d4 = d1.multiply(d2.divide(d3, MathContext.DECIMAL128));
System.out.println("d4 " + d4);
}
输出:
d4 0.1398571428571428571428571428571428991
答案 1 :(得分:0)
如果要将结果舍入到15位小数,则可以
double d1 = 0.979;
double d2 = 3;
double d3 = 21;
double d4 = d1 * d2 / d3;
double r15 = Math.round(d4 * 1e15) / 1e15;
System.out.println("r15 " + r15);
r15 0.139857142857143
这是你在excel中获得的数字。