如何检查双倍(2位小数)是否是5的倍数
因为我们都知道%运算符不适用于双数据类型..
和
fmod()似乎并非如此......
我想要做的是检查payment
是否是.05的倍数。
我正在尝试使用fmod(),其中remainder
和payment
都是双打
remainder = fmod(payment, 5)
当我使用小小数字时,如; .05,.10,。15,.20即使我使用
,我也会得到指数表示法 cout << setiosflags(ios::showpoint) << setprecision(3) << modulo << " space " << payment << endl;
不确定我做错了什么
答案 0 :(得分:3)
正如您所了解的那样,fmod()
并没有太大帮助。这是由于计算机存储浮点数的方式。有关详细信息,请参阅here。
这里正确的解决方案是选择一些整数货币单位。真实银行可能选择.00001美元作为整数单位。对你来说,使用.01美元作为你的整数单位就足够了。
这意味着如果我们想要存储用户欠$10.05
的内容,我们会将其存储为:
int owed = 1005;
一旦你这样做,就可以很容易地使用%
数字,并且很容易得到准确的结果。
答案 1 :(得分:-1)
怎么样:
int remainder =((int)(payment * 100))%5
答案 2 :(得分:-1)
正如@Angew所说,你不应该使用双打来代表货币价值。相反,使用整数将值表示为美分数。
那就是说,你应该做的是将答案乘以100,然后舍入到最接近的整数,然后计算模5。
即
((int)(payment*100 + 0.5)) % 5