C++中浮点数的格式化输出

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

  1. 定点输出法:我们平常日常生活中书写小数的方法,小数点不能随便移动,如3.1415926、123456.789;
    //设置浮点数按定点方式输出
    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;
    //设置浮点数按科学计数方式输出
    std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);  
  3. 默认输出方式:当输出方式设置成定点或科学计数法时,按默认方式进行浮点数输出,基础其输出方式为:根据输出的数值不同自动选择定点或科学计数方式之一输出,下一节会深入讨论默认输出方式时自动选择“定点”或“科学计数法”的规则。
    //设置浮点数按默认方式输出
    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以后的浮点数输出精度,直到设置了新的输出精度。 

实例:

#include <iostream>

int main()
{
	using std::cout;
	using std::endl;

	//默认输出方式,整数位数长为6,等于默认精度6,按定点法输出:123457
	//最后一位四舍五入
	cout << 123456.789 << endl;

	//设置精度为 8,输出方式没有变,还是默认的自动选择输出方式
	//此处精度并不是小数点后8位,而是8个有效数字
	cout.precision(8);  

	//默认输出方式:整数位数长为6,小于默认精度8,小数位数为8-6=2
	//按定点法输出:123456.79,最后一位四舍五入
	cout << 123456.789 << endl;  

	//默认输出方式,因为整数部分为0,所以整数部分的数位长度为0,小于默认精度8
	//小数位数为8-0=8按定点法输出:0.12345679
	cout << 0.123456789 << endl;

	//设置精度为 4,输出方式没有变,还是默认的自动选择输出方式
	//此处精度并不是小数点后4位,而是4个有效数字
	cout.precision(4);  

	//默认输出方式:整数部分的数位长度为5,大于设置精度4
	//按科学计数法输出:1.235e+004(e后面部分,在不同编译器下的输出可能不同)
	cout << 12345.6789 << endl;

	//用old变量保存当前正在使用的输出方式(也就是默认输出方式),并设置输出方式为定点方式,
	std::ios_base::fmtflags old = cout.setf(std::ios_base::fixed, std::ios_base::floatfield);

	//输出方式为定点输出方式,精度表示小数点后的位数,精度长是前面设置的4
	//按定点法输出:1234.5679
	cout << 1234.56789 << endl;

	//设置输出方式为科学计数法方式,精度表示小数点后的位数,精度长是前面设置的4
	cout.setf(std::ios_base::scientific, std::ios_base::floatfield);

	//按科学计数法输出:1.2346e+003(不同编译器下的输出可能不同)
	cout << 1234.56789 << endl;

	//按科学计数法输出:整数部分为0,则将整数部分设置成大于0且小于10的数,
	//输出1.2346e-002
	cout << 0.0123456789 << endl;

	//恢复默认输出方式:自动选择输出方式,但是精度不变,仍然为前面设置的4
	//但是现在的精度表示“有效数字个数”
	cout.setf(old, std::ios_base::floatfield);

	//整数部分长为7,大于精度4,选择科学计数法输出:1.235e+006
	cout << 1234567.89<< std::endl; 

	getchar();
}

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

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hn_tzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值