在乘法中使用双精度(java)

Using doubles in multiplication (java)

本问题已经有最佳答案,请猛点这里访问。

我有一个项目,在这个项目中,我必须创建一个购物车,有多个选项,例如向购物车中添加一定数量的项目。除非用户提示输入购物车的总数,否则一切都正常工作。它将输出一个疯狂的数字,例如15.9614.9500000000000000013.0美元。

这是用来打印总数的代码。所有的值都是双精度的。有什么帮助吗?

1
2
3
4
System.out.println("Your total comes to $" +
                   (dynamicRope * dynamicRopeCost) +
                   (staticRope * staticRopeCost) +
                   (webbing * webbingCost));


由于您处理购物车中的值,并且double在某种程度上只是精确的,所以我建议您使用BigDecimal来代替,因为它们提供了一个数字的精确表示。double的不精确性导致了不正确的控制台输出。

1
2
3
4
5
6
7
8
9
10
11
import java.math.BigDecimal;

BigDecimal dynamicRope = new BigDecimal("4"); // example value of 4
BigDecimal dynamicRopeCost = new BigDecimal("5.50"); // example value of 5.50

// Initialize the other variables as BigDecimal's here

System.out.println("Your total comes to $" +
                    dynamicRope.multiply(dynamicRopeCost)
                    .add(staticRope.multiply(staticRopeCost))
                    .add(webbing.multiply(webbingCost)));