在JAVA中添加分数时如何避免舍入错误

在JAVA中添加分数时如何避免舍入错误,java,Java,我需要将一系列分数相加,例如1/2+1/3+1/4+…,然后返回一个双精度。如何避免或最小化舍入误差?我建议您使用BigDecimal进行计算。当您必须以最大精度进行浮点和双精度计算时,它是最佳选择。我建议您使用BigDecimal进行计算。当您必须以最大精度进行浮点和双精度计算时,这是最佳的选择。如果您确实想保持精度,并且不想依赖BigDecimal的精度设置,则可以使用Apache分数库: e、 g: 。。。印刷品: 12月13日 1.0833333 注-此类在内部使用整数表示分子和分母。如

我需要将一系列分数相加,例如1/2+1/3+1/4+…,然后返回一个双精度。如何避免或最小化舍入误差?

我建议您使用BigDecimal进行计算。当您必须以最大精度进行浮点和双精度计算时,它是最佳选择。

我建议您使用BigDecimal进行计算。当您必须以最大精度进行浮点和双精度计算时,这是最佳的选择。

如果您确实想保持精度,并且不想依赖BigDecimal的精度设置,则可以使用Apache分数库:

e、 g:

。。。印刷品:

12月13日

1.0833333


注-此类在内部使用整数表示分子和分母。如果您想在分数中使用真正大的数字,那么math3版本的库提供了一个BigFraction类,而不是由BigInteger支持

如果您确实想保持准确性,并且不想依赖BigDecimal的精度设置,另一种选择是使用Apache分数库:

e、 g:

。。。印刷品:

12月13日

1.0833333


注-此类在内部使用整数表示分子和分母。如果您想在分数中使用真正大的数字,那么math3版本的库提供了一个BigFraction类,而不是由BigInteger支持

直到哪里?约束?用于方法中作为参数传递的任何长度。是否希望输出0.5表示1除以2,例如1/2?然后把所有的加起来?没错。这笔钱将作为双倍返还。到哪里?约束?用于方法中作为参数传递的任何长度。是否希望输出0.5表示1除以2,例如1/2?然后把所有的加起来?没错。总和将以双精度返回。您仍然需要指定精度,并且不能完美地表示无理分数。这是正确的,但这是一种不需要外部库的替代方法。OP需要指定分数的确切类型以及外部库是否正常。您仍然需要指定精度,并且不能完美地表示无理分数。这是正确的,但这是一种不需要外部库的替代方法。OP需要指定分数的确切类型以及外部库是否正常。
Fraction f1 = Fraction.getFraction(1, 2);
f1 = f1.add(Fraction.getFraction(1, 3));
f1 = f1.add(Fraction.getFraction(1, 4));

System.out.println(f1);
System.out.println(f1.doubleValue());