gpt4 book ai didi

java - 程序逻辑错误

转载 作者:行者123 更新时间:2023-12-01 17:31:34 24 4
gpt4 key购买 nike

所以我目前正在阅读一本关于学习java的书,书中概述的一个程序给我带来了一些麻烦。具体来说,当我运行该程序来计算我应该从 9.87 开始获得的美元金额和零钱时,我会得到零钱,就好像我输入 9.86 一样。然而,当我输入 9.86 时,我得到了正确的找零金额。据我所知,这只发生在某些以 0.87 结尾的金额(例如 8.87)上,尽管它适用于 6.87 罚款。这是Java 编程简介第 8 版这本书,由于它是由专业人士编写的书,所以我对可能出现的错误感到困惑。我尝试在 cmd 和 eclipse 中运行它,两者似乎都显示错误。

PasteBin 链接:

http://pastebin.com/CVssSUYp

最佳答案

我几乎可以肯定,您对 float 的工作原理了解甚少。你不能用二进制精确地表示 0.1,就像你不能用十进制精确地表示 1/3 一样。除此之外,IEEE float 的 double 精度不能超过 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.
}

关于java - 程序逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com