gpt4 book ai didi

while 循环中的 C++ 浮点精度

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:41 25 4
gpt4 key购买 nike

我试图通过使用一系列 while 循环来计算美元和硬币面额的总计数量。然而,当我开始研究硬币时,我差了一分钱。当我输入 99.95 时,我得到输出 3 25 美分、1 角、1 镍和 4 便士。我已将问题缩小为浮点精度问题。但是,我研究过的所有解决方案都不适用于我的情况。有什么指点吗?

#include <iostream>
using namespace std;

int main()

{
float amount;
cout<<"enter amount" << endl;
cin>>amount;
int pennies=0, nickels=0, dimes=0, quarters=0, ones=0, fives=0,
tens=0,
twenties=0, fifties=0, hundreds=0;

while (amount >= 100)
{
hundreds = hundreds +1;
amount = amount - 100;

}
while (amount >= 50)
{
fifties = fifties +1;
amount = amount - 50;

}
while (amount >= 20)
{
twenties = twenties +1;
amount = amount - 20;

}
while (amount >= 10)
{
tens = tens +1;
amount = amount - 10;

}
while (amount >= 5)
{
fives = fives +1;
amount = amount - 5;

}
while (amount >= 1)
{
ones = ones +1;
amount = amount - 1;

}
while (amount >= .25)
{
quarters = quarters +1;
amount = amount - .25;

}
while (amount >= .10)
{
dimes = dimes +1;
amount = amount - .10;

}
while (amount >= .05)
{
nickels = nickels +1;
amount = amount - .05;

}
while (amount >= .01)
{
pennies = pennies +1;
amount = amount - .01;

}


cout<<endl<<"pennies:"<< pennies;
cout<<endl<<"nickels:"<<nickels;
cout<<endl<<"dimes:"<<dimes;
cout<<endl<<"quarters:"<<quarters;
cout<<endl<<"ones:"<<ones;
cout<<endl<<"fives:"<<fives;
cout<<endl<<"tens:"<<tens;
cout<<endl<<"twenties:"<<twenties;
cout<<endl<<"fifties:"<<fifties;
cout<<endl<<"hundreds:"<<hundreds<<endl;







return 0;
}

最佳答案

在需要精确值的情况下不要使用 float 。 99.95 不能用 float 或 double 精确表示,有点像 1/3 不能用有限数量的普通十进制数字精确表示。

正如 Doug T. 建议的那样,您可以使用整数来保存便士的数量。当用户键入 123.45 时,将其读取为两个整数,然后将其存储为 12345 便士,而不是 123.45 美元。

在这种情况下,您还可以尝试将最后一个 while (amount >= .01) 更改为类似 while (amount >= .005) 的内容。这不是一个可以普遍推荐的解决方案,如果这是一个现实生活中的银行应用程序,你真的应该避免它,但它至少有助于避免一些错误。

关于while 循环中的 C++ 浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590920/

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