当前位置:   article > 正文

C++取整与保留小数位的问题与解决方法_c++保留小数点后几位怎么弄

c++保留小数点后几位怎么弄

目录

一  保留小数位的方法;

1.1 printf 格式化输出:

1.2 setprecision用法;

   1.2.0总述;

   1.2.1基本格式setprecision(int n)

   1.2.2 setiosflags(ios::fixed)

   1.2.3 setiosflags(ios::scientific)

 二  取整

        2.1 强制类型转换

         2.2取整函数;

                2.2.1四舍五入取整 round()函数;

                2.2.2向上取整 ceil()函数;

                2.2.3向下取整 floor()函数;


一  保留小数位的方法;

        1.1 printf 格式化输出

                可以用于处理浮点数不能用于处理整数;

                举例一:输入一个整数保留两位小数,再输入一个浮点数,保留三位小数;

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. short a;
  6. cin >> a;
  7. printf("%.2f\n", a);
  8. double b;
  9. cin >> b;
  10. printf("%.3f", b);
  11. return 0;
  12. }

运行结果:例如,依次输入4,3.67878;

  1. 4
  2. 0.00
  3. 3.67878
  4. 3.679
  5. C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 90000)已退出,代码为 0
  6. 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
  7. 按任意键关闭此窗口. . .

1.2 setprecision用法;

        1.2.0总述;

                需要加头文件#include <iomanip>;

                使用操作符将小数截短显示时,数据将进行四舍五入处理;

        1.2.1基本格式setprecision(int n)

                cout<<setprecision(int n)<<input<<endl;

                含义为输出n位有效数字,注意是有效数字而不是小数位数;

                直接输出或者设置精度为默认值0,都是输出六位有效数字;

                代码及运行结果:

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. cout << "setprecision(int n)方法:" << endl;
  7. cout << "无限循环小数:" << endl;
  8. double x = 10.0 / 7;
  9. for (int i = 0; i < 8; i++)
  10. cout <<"保留"<<i<<"位有效数字 "
  11. << setprecision(i) << x << endl;
  12. cout << "有限小数:" << endl;
  13. double y = 10.0 / 8;
  14. for (int i = 0; i < 6; i++)
  15. cout << "保留" << i << "位有效数字 "
  16. << setprecision(i) << y << endl;
  17. return 0;
  18. }

运行结果:

  1. setprecision(int n)方法:
  2. 无限循环小数:
  3. 保留0位有效数字 1
  4. 保留1位有效数字 1
  5. 保留2位有效数字 1.4
  6. 保留3位有效数字 1.43
  7. 保留4位有效数字 1.429
  8. 保留5位有效数字 1.4286
  9. 保留6位有效数字 1.42857
  10. 保留7位有效数字 1.428571
  11. 有限小数:
  12. 保留0位有效数字 1
  13. 保留1位有效数字 1
  14. 保留2位有效数字 1.2
  15. 保留3位有效数字 1.25
  16. 保留4位有效数字 1.25
  17. 保留5位有效数字 1.25
  18. C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 86848)已退出,代码为 0
  19. 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
  20. 按任意键关闭此窗口. . .

      1.2.2 setiosflags(ios::fixed)

               cout<<setiosflags(ios::fixed)<<setprecision(int n)<<input<<endl;

                含义为保留n位小数,注意,这里的n是n位小数的意思;

                不设置精度,显示6位有效小数;

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. cout << "setprecision(int n)方法:" << endl;
  7. cout << "无限循环小数:" << endl;
  8. double x = 10.0 / 7;
  9. for (int i = 0; i < 8; i++)
  10. cout <<"保留"<<i<<"位小数 "
  11. <<setiosflags(ios::fixed)
  12. << setprecision(i) << x << endl;
  13. cout << "有限小数:" << endl;
  14. double y = 10.0 / 8;
  15. for (int i = 0; i < 6; i++)
  16. cout << "保留" << i << "位小数 "
  17. << setiosflags(ios::fixed)
  18. << setprecision(i) << y << endl;
  19. return 0;
  20. }

运行结果为:

  1. setprecision(int n)方法:
  2. 无限循环小数:
  3. 保留0位小数 1
  4. 保留1位小数 1.4
  5. 保留2位小数 1.43
  6. 保留3位小数 1.429
  7. 保留4位小数 1.4286
  8. 保留5位小数 1.42857
  9. 保留6位小数 1.428571
  10. 保留7位小数 1.4285714
  11. 有限小数:
  12. 保留0位小数 1
  13. 保留1位小数 1.2
  14. 保留2位小数 1.25
  15. 保留3位小数 1.250
  16. 保留4位小数 1.2500
  17. 保留5位小数 1.25000
  18. C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 96368)已退出,代码为 0
  19. 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
  20. 按任意键关闭此窗口. . .

   1.2.3 setiosflags(ios::scientific)

cout<<setiosflags(ios::scientific)<<setprecision(int n)<<input<<endl;

                含义为输出格式为科学计数法格式,保留n位小数;

                不设置精度时,显示六位有效的小数位;

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. cout << "setprecision(int n)方法:" << endl;
  7. cout << "无限循环小数:" << endl;
  8. double x = 1000.0 / 7;
  9. for (int i = 0; i < 8; i++)
  10. cout << "保留" << i << "位小数 "
  11. << setiosflags(ios::scientific)
  12. << setprecision(i) << x << endl;
  13. cout << "有限小数:" << endl;
  14. double y = 100.0 / 8;
  15. for (int i = 0; i < 6; i++)
  16. cout << "保留" << i << "位小数 "
  17. << setiosflags(ios::scientific)
  18. << setprecision(i) << y << endl;
  19. return 0;
  20. }

运行结果为:

  1. setprecision(int n)方法:
  2. 无限循环小数:
  3. 保留0位小数 1e+002
  4. 保留1位小数 1.4e+002
  5. 保留2位小数 1.43e+002
  6. 保留3位小数 1.429e+002
  7. 保留4位小数 1.4286e+002
  8. 保留5位小数 1.42857e+002
  9. 保留6位小数 1.428571e+002
  10. 保留7位小数 1.4285714e+002
  11. 有限小数:
  12. 保留0位小数 1e+001
  13. 保留1位小数 1.2e+001
  14. 保留2位小数 1.25e+001
  15. 保留3位小数 1.250e+001
  16. 保留4位小数 1.2500e+001
  17. 保留5位小数 1.25000e+001
  18. C:\Users\uaer\source\repos\12.26\x64\Debug\12.26.exe (进程 86048)已退出,代码为 0
  19. 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
  20. 按任意键关闭此窗口. . .

 二  取整

        2.1 强制类型转换

                强制类型转换分为显示类型转换和隐式类型转换;

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int x = 2.6;//隐式类型转换;
  6. cout << "x=" << x << endl;
  7. double y = 2.67321;//显示类型转换;
  8. //显示类型转换的格式为static_cast<希望转换成的数据类型 只能为基本数据类型>(输入数据);
  9. cout << "y=" << static_cast<int>(y) << endl;
  10. return 0;
  11. }

运行结果为:

  1. x=2
  2. y=2

         2.2取整函数;

                2.2.1四舍五入取整 round()函数;

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. double x = 3.1415926;
  7. double y = 2.71828;
  8. cout << round(x) << endl;
  9. cout << round(y) << endl;
  10. return 0;
  11. }

运行结果为: 

  1. 3
  2. 3

         2.2.2向上取整 ceil()函数;

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. double x = 3.1415926;
  7. double y = 2.71828;
  8. cout << ceil(x) << endl;
  9. cout << ceil(y) << endl;
  10. return 0;
  11. }

运行结果为:

  1. 4
  2. 3

         2.2.3向下取整 floor()函数;

        其实隐式类型转换也是一种向下取整;

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. double x = 3.1415926;
  7. double y = 2.71828;
  8. cout << floor(x) << endl;
  9. cout << floor(y) << endl;
  10. return 0;
  11. }

 运行结果为:

  1. 3
  2. 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/678350
推荐阅读
相关标签
  

闽ICP备14008679号