C++ cout.setf(ios_base::fixed,ios_base::floatfiled)解析

setf函数有两个原型:

  1. fmtflags setf(fmtflags flags);
  2. fmtflags setf(fmtflags flags, fmtflags mask);

ios_base类有一个受保护的数据成员,其中的各位(flag)分别控制着格式化的各个方面,如基数{hex,oct,dec},是否显示正数前面的+号,打开一个标志位就是设置该标志位,即设置为1;

对于第一个原型fmtflags setf(fmtflags flags)就是设置相应的标志位,同时返回以前的标志参数;

fmtflags是bitmask类型,以下是一些常用量:

格式常量
常量 含义
ios_base::boolalpha 输入和输出bool值,可以为true或者false
ios_base::showbase 对于输出,使用C++前缀(0for Octal, 0Xfor hexadecimal)
ios_base::showpos 在正数前面加上+(decimal)
ios_base::uppercase 对于16进制输出来使用大写字母,E表示法
ios_base::showpoint 显示末尾的小数点

对于第二个原型fmtflags setf(fmtflags, fmtflags);第一个参数和第一个原型一样,都是设置格式,第二个参数是mask,意思是要清除第一个参数中的哪些位;举例说明:将第3位设置为1表示以10为基数,将第4位设置为1表示以8为基数,将第5位设置为1表示以16为基数,假如现在输出是以10为基数,则需要清除第3位的1,设置为0,设置第5位为1;

格式可以理解为fl = (fl & ~mask) | (flags & mask)

简而言之就是说mask表示了哪些位要被设置,而flags表示这些位设置成什么

fmtflags mask fmtflags:flags 含义
ios_base::basefield ios_base::dec 使用基数10
ios_base::oct 使用基数8
ios_base::hex 使用基数16
ios_base:floatfield ios_base::fixed 使用定点计数法,如1234.5
ios_base::scientific 使用科学计数法,如1.2345e4
ios_base::adjustfield ios_base::left 使用左对齐
ios_base::right 使用右对齐
ios_base::internal 符号或基数前缀左对齐,数值右对齐

再回到C++ cout.setf(ios_base::fixed,ios_base::floatfiled)

就是说输出使用定点输出,同时输出到小数点后6位。

对于定点计数和科学计数法

  1. 精度是指小数点后几位数
  2. 显示末尾的0

你可能感兴趣的:(C++,c++)