gpt4 book ai didi

c++ - 在 C++ 中将 float 转换为 int 时丢失数据

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:39 24 4
gpt4 key购买 nike

除了分数值的明显预期损失外,我不明白为什么会发生这种情况......

考虑家庭作业中用于将数字转换为英语短语的以下片段:

int main() {
float dollars;

cout << "Please supply a dollar amount between $0.01 and $9999.99 (without the dollar sign): ";
while (true) {
cin >> dollars;

if (cin.fail() || dollars < 0.01 || dollars > 9999.99) {
cin.clear();
cin.ignore();
cout << "You provided an invalid number. Please try again: ";
} else {
// Test code:
cout << "You entered: " << dollars << endl;
cout << "Times 100 without cast: " << dollars * 100 << endl;
cout << "Times 100 with cast: " << (int)(dollars * 100) << endl;
cout << "Cents: " << ((int)(dollars * 100)) % 100 << endl;
break;
}
}

printDollarsAsString(dollars);

return 0;
}

我注意到当提供值 9999.21 时,else block 中第二个和第三个 cout 语句的输出不同1. 例如,这是我运行这段代码时的输出:

Please supply a dollar amount between $0.01 and $9999.99 (without the dollar sign): 9999.21
You entered: 9999.21
Times 100 without cast: 999921
Times 100 with cast: 999920
Cents: 20

我该如何解决这个问题,以便正确检索美分值?我可以采用其他方法吗?

最佳答案

        cout << "Times 100 without cast: " << dollars * 100 << endl;
cout << "Times 100 with cast: " << (int)(dollars * 100) << endl;

当您转换为 int 时,您是在截断数字,而不是四舍五入。在这种情况下,.21 不能完全按二进制 float 存储,因为它实际上是一个重复数。重复数略小于.21。因此,当您乘以 100 时,您会得到 999920.9...,它会通过转换截断为 999920

关于c++ - 在 C++ 中将 float 转换为 int 时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35069270/

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