C++|浮点数误差的解决方案
最近做一道编程改错题,遇到了这个问题,书中想要的解决方式并不具有一般性,并且,实际操作中不应该这样简单地修改,所以,我们可以使用cmath头文件下的三种单变量函数。
- ceil(x)返回不小于x的最小整数值(然后转换为double型)
- floor(x)返回不大于x的最大整数值
- round(x)返回x的四舍五入整数值
例:计算电费
1 #include <iostream> 2 #include <iomanip> 3 #include <cmath> 4 using namespace std; 5 6 int main() 7 { 8 int quantity, yuan, jiao; 9 double charge; 10 11 cout << "请输入本月用电量(单位:度):"; 12 cin >> quantity; 13 14 charge = 0.6 * quantity; 15 cout << "本月需要支付电费:" << charge << "元" << endl; 16 17 yuan = floor(charge); 18 19 jiao = round((charge - yuan) * 10); 20 21 cout << endl; 22 cout << "共需要" << yuan << "个一元和" << jiao << "个一角的硬币" << endl; 23 24 return 0; 25 }
注意第19行,若不使用round()函数,则当程序输入为3时,由于浮点误差,程序会得到错误的结果。
这是一道取自一本C++教科书上的题目,老师提供的一种思路也很好,那就是直接把题目转化为不需要浮点数类型的变量们。拒绝double,只接受int,使得不需要考虑浮点误差。但是,这三个函数在以后的实际应用中还是很有必要的。
写点代码,读点小诗,慢点生活。

浙公网安备 33010602011771号