gpt4 book ai didi

c++ - 如何在不丢失任何数据的情况下安全地从 double 转换为 int

转载 作者:行者123 更新时间:2023-11-28 04:18:12 25 4
gpt4 key购买 nike

我有一个股票买卖程序,用户可以在其中说出他们希望买卖多少股票。一切正常,直到用户想要以 4.10 美元的价格以 5.10 美元的价格出售股票。为了更轻松地使用 float 进行数学运算,我将 double 型转换为整数:10.10 变为 1010,依此类推。每当我将 4.10 转换为 int 时,它都会变成 409,对于 5.10 也会发生同样的情况。

钱存储在一个类 Dollars 中。在此类内部,当我调用构造函数时,我可以调用 Dollars(int cents): cents(cents) {}Dollars(double dollars): cents(0) { *这=美元; }。使用 double 构造函数时,它使用以下 cents = (int)(dollars * 100.0); 将给定的 double 转换为 int。

我尝试过在类中使用 (int)(double) cast 方法转换为 int,我也尝试过转换为 int,并使用 int 构造函数, 但都没有用。

当我输入 4.10 时,我预计此转换的输出为 410,但结果总是 4.09。

最佳答案

不要对货币使用 float 。 4.10*100 也可能是 409.999999... 并且转换为 int 只是截断。在这种情况下,您将通过首先调用 std::round 获得更精确的结果。 .它不会解决所有舍入错误。仍然会有结果不正确的情况,仅仅因为 double有 52 位尾数和 int如果为 x64 平台编译,可以/将是 64 位。

最后一个问题有时可以通过 long double 来解决如果有支持的话。即sizeof(long double)>sizeof(double)这是不能保证的。

最简单的正确实现是简单地使用 uint64_t并进行所有计算,例如美分。那么所有的数学运算都是精确的。在现实生活中,当银行计算利息时,它也会对结果进行四舍五入,不需要 float 精度。那么正确的打印是: cout<<amount/100<<"dollars "<<amount%100<<"cents";

关于c++ - 如何在不丢失任何数据的情况下安全地从 double 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094124/

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