【发布时间】:2019-09-29 08:07:20
【问题描述】:
我有一个股票买卖程序,用户可以在其中说出他们希望买卖多少股票。一切正常,直到用户想以 5.10 美元的价格以 4.10 美元的价格出售股票。为了使用浮点数更容易进行数学运算,我将双精度数转换为整数:10.10 变为 1010,依此类推。每当我将 4.10 转换为 int 时,它就会变成 409,5.10 也是如此。
钱存储在一个类中,美元。在这个类内部,当我调用构造函数时,我可以调用Dollars(int cents): cents(cents) {} 或Dollars(double dollars): cents(0) { *this = dollars; }。当使用 double 构造函数时,它使用以下 cents = (int)(dollars * 100.0); 将给定的 double 类型转换为 int。
我尝试在类中使用(int)(double) cast 方法转换为int,我之前也尝试过转换为int,并使用int 构造函数,但都没有成功。
当我喂它 4.10 时,我希望这个演员的输出是 410,但它总是输出到 4.09。
【问题讨论】:
-
查看Money Pattern。您的客户簿记员会感激不尽并感到满意。
-
不要使用浮点数作为货币。
4.10*100也可能是409.999999...并且转换为 int 只是截断。在这种情况下,您将首先调用std::round获得更精确的结果 -
@Quimby,我想知道,为什么许多人将他们的正确答案发布为 cmets(你也这样做)?这样很多问题最终都没有答案,而正确的答案在 cmets 中。
-
@Dmitry 我希望这个答案会以重复或类似的方式关闭。它只有两行,似乎不足以回答。但你可能是对的。