当前位置:   article > 正文

C++中浮点数的格式化输出_c++以定点输出法输出浮点数

c++以定点输出法输出浮点数

C++中浮点数的输出方式有:

  1. 定点输出法:我们平常日常生活中书写小数的方法,小数点不能随便移动,如3.1415926、123456.789;
    1. //设置浮点数按定点方式输出
    2. std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
  2. 科学计数输出法:将一个浮点数写成一个数乘以10的n次方的形式,如123456.789可以写成1.23456789乘以10的5次方,0.618可以写成6.18乘以10的-1次方,在C++中分别表示为:1.23456789e5、6.18e-1;
    1. //设置浮点数按科学计数方式输出
    2. std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
  3. 默认输出方式:当输出方式设置成定点或科学计数法时,按默认方式进行浮点数输出,基础其输出方式为:根据输出的数值不同自动选择定点或科学计数方式之一输出,下一节会深入讨论默认输出方式时自动选择“定点”或“科学计数法”的规则。
    1. //设置浮点数按默认方式输出
    2. std::cout.setf(0, std::ios_base::floatfield);

      设置了cout的浮点数输出方式后,会一直影响cout以后的浮点数输出方式,直到设置了新的输出方式。

默认输出方式时自动选择“定点”或“科学计数法”的规则:

        在C++中,如果没有指定输出方式(定点或科学计数法)浮点数会根据输出的值自动选择输出方式。浮点数的默认输出精度包含6个有效数字(小数点与末尾的 0 不占用6个精度的位置),小数点后末尾的 0 不输出。

  • 如果浮点数的整数部分长度小于或等于 6,则用定点(fixed)表示法,小数位数为【6 - 整数部分长】,如3.14,整数部分只有数字 3,长度为 1,则小数部分应该有 6 - 1 = 5位,但是【14】后面都是0,默认不显示,因此会输出3.14;再有123456.789,整数部分为 123456,长度为 6 位,小数部分位数应该是 6 - 6 = 0位,则输出为123457(最后一位四舍五入)。
  • 注意:当整数部分为 0 时,整数部分不占有效位长度,如0.123456789会输出 0.123457(6位小数)。
  • 如果浮点数的整数部分长度大于6,则用科学计数法(scientific)表示,如1234567.89,它的整数部分为 1234567,长度为 7,大于 6,因此采用科学计数法,输出 1.23457e+006(注:e后面的部分在不同编译器下显示可能不相同)。
  • 总结:在默认情况下,浮点数输出会根据浮点数的整数部分长度,自动选择使用科学计数法或定点表示法来进行输出。

设置精度位数

        语法:cout.precision(精度值),如设置精度为9,使用 cout.precision(9);

       精度的两种不同情况:

  1. 情况1:当使用默认的输出方式(未设置成定点或科学计数法输出方式)时,精度表示有效的数字个数,会按上一节【默认输出方式的选择办法】中的方式进行输出;
  2. 情况2:当设置了定点或科学计数法时,精度表示小数点后的位数,不足精度位时,在末尾补上相应个数的 0。

      设置了cout的浮点数输出精度后,会一直影响cout以后的浮点数输出精度,直到设置了新的输出精度。 

实例:

  1. #include <iostream>
  2. int main()
  3. {
  4. using std::cout;
  5. using std::endl;
  6. //默认输出方式,整数位数长为6,等于默认精度6,按定点法输出:123457
  7. //最后一位四舍五入
  8. cout << 123456.789 << endl;
  9. //设置精度为 8,输出方式没有变,还是默认的自动选择输出方式
  10. //此处精度并不是小数点后8位,而是8个有效数字
  11. cout.precision(8);
  12. //默认输出方式:整数位数长为6,小于默认精度8,小数位数为8-6=2
  13. //按定点法输出:123456.79,最后一位四舍五入
  14. cout << 123456.789 << endl;
  15. //默认输出方式,因为整数部分为0,所以整数部分的数位长度为0,小于默认精度8
  16. //小数位数为8-0=8按定点法输出:0.12345679
  17. cout << 0.123456789 << endl;
  18. //设置精度为 4,输出方式没有变,还是默认的自动选择输出方式
  19. //此处精度并不是小数点后4位,而是4个有效数字
  20. cout.precision(4);
  21. //默认输出方式:整数部分的数位长度为5,大于设置精度4
  22. //按科学计数法输出:1.235e+004(e后面部分,在不同编译器下的输出可能不同)
  23. cout << 12345.6789 << endl;
  24. //用old变量保存当前正在使用的输出方式(也就是默认输出方式),并设置输出方式为定点方式,
  25. std::ios_base::fmtflags old = cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
  26. //输出方式为定点输出方式,精度表示小数点后的位数,精度长是前面设置的4
  27. //按定点法输出:1234.5679
  28. cout << 1234.56789 << endl;
  29. //设置输出方式为科学计数法方式,精度表示小数点后的位数,精度长是前面设置的4
  30. cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
  31. //按科学计数法输出:1.2346e+003(不同编译器下的输出可能不同)
  32. cout << 1234.56789 << endl;
  33. //按科学计数法输出:整数部分为0,则将整数部分设置成大于0且小于10的数,
  34. //输出1.2346e-002
  35. cout << 0.0123456789 << endl;
  36. //恢复默认输出方式:自动选择输出方式,但是精度不变,仍然为前面设置的4
  37. //但是现在的精度表示“有效数字个数”
  38. cout.setf(old, std::ios_base::floatfield);
  39. //整数部分长为7,大于精度4,选择科学计数法输出:1.235e+006
  40. cout << 1234567.89<< std::endl;
  41. getchar();
  42. }

C++中判断浮点数输出样式的流程图

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号