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,使得不需要考虑浮点误差。但是,这三个函数在以后的实际应用中还是很有必要的。

posted @ 2019-09-21 14:16  =Icarus=  阅读(2553)  评论(0)    收藏  举报