我几乎可以肯定你被对浮点数如何工作的理解不足所困扰。你不能再用二进制精确表示 0.1,就像用十进制表示 1/3 一样。然后,除此之外,IEEE 浮点数的双精度数不能超过 17 位。
这不是 Java 或您的代码中的错误。
金钱是不应该用十进制数字表示的东西的典型例子。
编写一个包含整数美元和美分的 Money 类,并在您学习足够的 Java 时使用它:
public class Money {
private final int dollars;
private final int cents;
private final Currency currency;
public Money(int dollars, int cents, Currency curr) {
if (dollars < 0) throw new IllegalArgumentException("dollars cannot be negative");
if (cents < 0) throw new IllegalArgumentException("cents cannot be negative");
if (curr == null) throw new IllegalArgumentException("currency cannot be null");
this.dollars = dollars;
this.cents = cents;
this.currency = curr;
}
// more methods here.
}