我如何检查双倍是多重5?

时间:2015-03-21 19:17:23

标签: c++ double modulus

如何检查双倍(2位小数)是否是5的倍数

因为我们都知道%运算符不适用于双数据类型..

fmod()似乎并非如此......

我想要做的是检查payment是否是.05的倍数。

我正在尝试使用fmod(),其中remainderpayment都是双打

remainder = fmod(payment, 5)

当我使用小小数字时,如; .05,.10,。15,.20即使我使用

,我也会得到指数表示法
   cout << setiosflags(ios::showpoint) << setprecision(3) << modulo << "  space   " << payment << endl; 

不确定我做错了什么

3 个答案:

答案 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