2017-01-25 10:34:51 ly890700 阅读数 1065

flat a = 1;

flat b = 3;


cout << a <endl;

cout << showpoint << b <endl;


ANSI C++里一个浮点型若是小数部分为0,直接输出必然是不带小数点的,例如float b=3;你若想输出3.0,输出代码要这样写:cout << showpoint << a;

2017-09-13 10:00:52 qq_33591755 阅读数 6078

out<<fixed  //用一般的方式输出浮点型,例如C++程序在控制台显示大一点的数,显示的时候使用了科学计数法,使用该命令即可像一般的方式显示

cout.precision(2) //设置精确度为2,并返回上一次的设置。

cout.setf(iOS_base::showpoint)  //显示浮点数小数点后面的零。


更多格式说明

用来格式控制的。setf()是追加标志字的函数,而flags()是设置标志字
fixed标志是以定点形式显示浮点数showpoint标志是强制显示小数点precision就是精度,表示输出多少小数位。
试试这段代码你就知道了
#include <iostream.h>
#include <iomanip.h>
void main(void)
{
cout.setf(ios::fixed);
cout<<setprecision(2)<<(float)0.1<<endl;//输出0.10

cout.unsetf(ios::fixed);
cout<<setprecision(2)<<(float)0.1<<endl; //输出0.1
} 以下是一些常见的控制函数的:
dec 置基数为10 相当于"%d"
hex 置基数为16 相当于"%X"
oct 置基数为8 相当于"%o"
setfill(c) 设填充字符为c
setprecision(n) 设显示小数精度为n位
setw(n) 设域宽为n个字符
这个控制符的意思是保证输出宽度为n。如:
cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100; 输出结果为
1 10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。
setioflags(ios::fixed) 固定的浮点显示
setioflags(ios::scientific) 指数表示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::skipws 忽略前导空白
setiosflags(ios::uppercase) 16进制数大写输出
setiosflags(ios::lowercase) 16进制小写输出
setiosflags(ios::showpoint) 强制显示小数点
setiosflags(ios::showpos) 强制显示符号
输出实例加源代码
// outfile.cpp -- writing to a file
#include <iostream>
#include <fstream>                  // for file I/O

int main()
{
    using namespace std;
    char automobile[50];
    int year;
    double a_price;
    double d_price;
    ofstream outFile;               // create object for output
    outFile.open("carinfo.txt");    // associate with a file
    cout << "Enter the make and model of automobile: ";
    cin.getline(automobile, 50);
    cout << "Enter the model year: ";
    cin >> year;
    cout << "Enter the original asking price: ";
    cin >> a_price;
    d_price = 0.913 * a_price;

// display information on screen with cout
    cout << fixed;
    cout.precision(2);
    cout.setf(ios_base::showpoint);
    cout << "Make and model: " << automobile << endl;
    cout << "Year: " << year << endl;
    cout << "Was asking $" << a_price << endl;
    cout << "Now asking $" << d_price << endl;

// now do exact same things using outFile instead of cout
    outFile << fixed;
    outFile.precision(2);
    outFile.setf(ios_base::showpoint);
    outFile << "Make and model: " << automobile << endl;
    outFile << "Year: " << year << endl;
    outFile << "Was asking $" << a_price << endl;
    outFile << "Now asking $" << d_price << endl;
     
    outFile.close();              // done with file
    // cin.get();
    // cin.get();
    return 0;
}
cout输出结果(图左侧窗口)和outFile输出结果(图右侧TXT文本文件)见图;该TXT文本是由outFile.open()关联的,文件位置一般在该可执行文件(源代码)所在的目录,文件名为carinfo,该文件也可能位于其他位置。

2017-09-02 10:25:00 huichangxindong 阅读数 1137

C/C++ 数据格式化

C/C++数据格式化输出的方式是设置格式化标志,格式化标志就是位掩码值,该位掩码值可以通过成员函数setf来设置,也可用unsetf来复位。

标准流成员函数precision用来指定浮点值显示的小数位数。但是如果没有设置iOS::showpoint标志,那么末尾的零将不被显示。要用前置加号来打印正数,就用ios::showpos。

格式化标志(iostream)

标志 含义 默认
boolalpha 以alpha格式进行布尔输入输出
showbase 显示8/16进制的前缀 off
showpoint 显示10进制数末尾的零 off
showpos 正数时显示加号 off
skipws >>跳过空格键 on
uppercase 0X代表16进制,E代表科学计数 off
unitbuf 启用单元缓冲 off

举一个例子

double x = 1.5, y = 2.5;
cout.precision(3); //保留小数点后两位,vs下测试时,貌似这个数是包含小数点的
cout << x << endl; //打印1.5
cout << y << endl; //打印2.5
cout.setf(ios::showpoint); //保留小数点后的0
cout << x << endl; //打印1.50
cout << y << endl; //打印2.50

测试结果:

这里写图片描述

数据格式化测试代码:

#include <iostream>

using namespace std;

int main(void)
{
    float x = 12345.6789, y = 12345;
    //数据正常输出(默认方式)
    cout << x << " " << y << endl;

    //显示两个十位数
    cout.precision(3);
    cout << x << ' ' << y << endl;

    //显示末尾的零
    cout.setf(ios::showpoint);
    cout << x << ' ' << y << endl;

    //显示符号
    cout.setf(ios::showpos);
    cout << x << ' ' << y << endl;

    //返回符号和默认值的精度
    cout.unsetf(ios::showpos);
    cout.precision(0);

    //使用科学计数法
    cout.setf(ios::scientific, ios::floatfield);
    float z = 1234567890.123456;
    cout << z << endl;
    cout.setf(ios::uppercase);
    cout << z << endl;

    return 0;
}

//测试输出:(测试环境:vs2013)
这里写图片描述

数据操纵器(iomanip)

操纵器 结果等价于setf函数 意义
【fint flags group】
boolalpha setf(boolalpha) 布尔型
noboolalpha unsetf(boolalpha) 非布尔型
showbase setf(showbase) 显示基数
noshowbase unsetf(showbase) 不显示基数
showpoint setf(showpoint) 显示小数点
noshowpoint unsetf(showpoint) 不显示小数点
showpos setf(showpos) 正数前添加正号
noshowpos unsetf(showpos) 正数前不添加正号
skipws setf(skipws) 跳过输出中的空白
noskipws unsetf(skipws) 不跳过输出中的空白
uppercase setf(uppercase) 大写
nouppercase unsetf(uppercase) 小写
unitbuf setf(unitbuf) 插入操作数后立即刷新缓冲区
nounitbuf unsetf(unitbuf) 插入操作数后不立即刷新缓冲区
【adjustfeild group】
internal setf(internal, adjustfeild) 小写
left setf(left, adjustfeild) 内部对其
right setf(right, adjustfeild) 左对齐
uppercase setf(uppercase) 右对齐
【basefield group】
dec setf(dec, basefeild) 十进制
oct setf(oct, basefeild) 八进制
hex setf(hex, basefeild) 十六进制
【floatfeild group】
fixed setf(fixed, floatfeild ) 固定
scientific setf(scientific, floatfeild ) 科学计数
【others】
endl insert a newline and calls flush() 插入一个换行符并刷新
ends insert a ‘\0’ 插入一个空字符
flush flush the stream 强制刷新流

测试代码:

int x = 1, y = 2, z = 3;
cout << x << y << z << endl;

//不同基数下显示
cout << dec << x << endl \
    << oct << y << endl \
    << hex << z << endl;

//显示基数前缀
cout.setf(ios::showbase);
cout << dec << x << endl \
    << oct << y << endl \
    << hex << z << endl;

//测试结果:
这里写图片描述

参数化的操纵器(iomanip)

操纵器 意义
resetiofags(n) 复位所有n中所这只的标志(关闭n所设置的所有标志)
setiofags(n) 设置所有n所设置的标志
setbase(n) 等同于setf(n, ios::basefeild)
setfill(n) 等同于fill(n)//填充多余长度(默认为空格)
setprecision(n) 等同于precision(n)
setw(n) 等同于width(n)//设置输出宽度
2016-05-21 10:42:45 SMF0504 阅读数 22096

C++中cout.setf(ios::left,ios::adjustfield); cout.setf(ios::showpoint,ios::showpint);
cout.setf(ios::scientific,ios::floatfield);
分别表示什么

参考以下:

1.使用控制符控制输出格式
控制符 作用 
dec 设置整数的基数为10 
hex 设置整数的基数为16 
oct 设置整数的基数为8 
setbase(n) 设置整数的基数为n(n只能是16,10,8之一) 
setfill(c) 设置填充字符c,c可以是字符常量或字符变量 
setprecision(n) 设置实数的精度为n位.在以一般十进制小数形式输出时,n代表有效数字.在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数.
setw(n) 设置字段宽度为n位.
setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示.
setiosflags(ios::scientific) 设置浮点数以科学计数法(即指数形式)显示.
setiosflags(ios::left) 输出数据左对齐.
setiosflags(ios::right) 输出数据右对齐.
setiosflags(ios::shipws) 忽略前导的空格.
setiosflags(ios::uppercase) 在以科学计数法输出E和十六进制输出字母X时,以大写表示.
setiosflags(ios::showpos) 输出正数时,给出“+”号.
resetiosflags 终止已设置的输出格式状态,在括号中应指定内容.
2.用流对象的成员控制输出格式
流成员函数 与之作用相同的控制符 作用 
precision(n) setprecision(n) 设置实数的精度为n位.
width(n) setw(n) 设置字段宽度为n位.
fill(c) setfill(c) 设置填充字符c.
setf( ) setiosflags( ) 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同.
ubsetf( ) resetiosflags( ) 终止已设置的输出格式状态.
cout.width(10); 
cout.setf(ios::hex);
3.设置格式状态的格式标志
格式标志 作用 
ios::left 输出数据在本域宽范围内左对齐 
ios::right 输出数据在本域宽范围内右对齐 
ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充 
ios::dec 设置整数的基数为10 
ios::oct 设置整数的基数为8 
ios::hex 设置整数的基数为16 
ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头) 
ios::showpoint 强制输出浮点数的小点和尾数0 
ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示 
ios::showpos 输出正数时,给出“+”号.
ios::scientific 设置浮点数以科学计数法(即指数形式)显示 
ios::fixed 设置浮点数以固定的小数位数显示 
ios::unitbuf 每次输出后刷新所有流 
ios::stdio 每次输出后清除stdout,stderr 
以小数形式,保留三位小数输出:
cout
2018-03-16 23:47:06 It_BeeCoder 阅读数 439

  • 例子:

cout << fixed << setprecision(3) << sum << endl;//此语句作用为保存小数点后三位

  • C++中有关精度控制的三个函数(setprecision、fixed、showpoint)的用法总结

cout<<setiosflags(ios∷fixed)<<setprecision(4);

其实是
std::cout<<std::setiosflags(std::ios∷fixed)<<std::setprecision(4);
std::代表标准库全局域
std::ios∷fixed代表全局域下有个类ios,ios类中有个常量fixed。
std::setiosflags(std::ios∷fixed)设置小数。
std::setprecision(4); //设置精度

cout<<showpoint<<12345.0006666<<endl;//输出12345.0 
cout<<fixed<<setprecision(2)<<123.456<<endl;}
cout<<showpoint<<s<<endl;//输出20.78391 
4.有语句:
cout<<fixed<<s<<endl;//输出20.78 
cout<<showpoint<<s<<endl;//输出20.78
cout<<showpoint<<s<<endl;//21.(有个点) 
cout<<fixed<<s<<endl;//20.78

#include <iomanip> 头文件必须包含,这个没什么好说的,上面的都在iomanip中定义。

注意:在C++文件的开头记得要加头文件:iomanip

一:setprecision

         作用:控制输出流显示浮点数的数字个数,setprecision(n)就是输出的n个数,会有四舍五入。

比如:double s=20.7843000,

cout<<setprecision(1)<<s<<endl;会输出2e+001,因为要输出一个数字,所以只有2.

cout<<setprecision(2)<<s<<endl;会输出21。

cout<<setprecision(3)<<s<<endl;会输出20.8。

cout<<setprecision(6)<<s<<endl;会输出20.7843。

cout<<setprecision(7)<<s<<endl;会输出20.7843。

cout<<setprecision(8)<<s<<endl;会输出20.7843。

可见,小数部分末尾为0时,是输不出来的!

要想输出来,就得用showpoint了。

特别提示 :

(如果再在这些语句后面加个两个语句:

cout<<1<<endl;

cout<<1.00800<<endl;

猜到会输出什么吗?

第一条输出:1。不是浮点型。

第二条为:1.008。承接setprecision(8)的这条规则语句。

注:

如果直接有语句

int main()

{

cout<<1<<endl;

cout<<1.00<<endl;

}

第一条输出:1。

第二条也为:1。按整型输出 

二:setprecision与showpoint

语法:在输出语句前声明:cout.setf(ios::showpoint);就行了!

还比如:double s=20.7843000,

cout.setf(ios::showpoint);

cout<<setprecision(1)<<s<<endl;就会输出2.e+001,注意,2和e之间多了一个“.”。

cout<<setprecision(2)<<s<<endl;会输出21.。多个点!

cout<<setprecision(3)<<s<<endl;会输出20.8。

cout<<setprecision(6)<<s<<endl;会输出20.7843。

cout<<setprecision(7)<<s<<endl;会输出20.78430。

cout<<setprecision(8)<<s<<endl;会输出20.784300。

可见,就会输出想要的数据数目!

特别提示 :

(如果再在这些语句后面加个两个语句:

cout<<1<<endl;

cout<<1.0080<<endl;

猜到会输出什么吗?

第一条输出:1。不是浮点型。

第二条也为:1.0080000。承接setprecision(8)的这条规则语句。

三:setprecision与fixed

如果想要保留几位小数,那setprecision就得与fixed合作了!!

语法:在输出语句前声明:cout.setf(ios::fixed);

比如:double s=20.7843909

cout.setf(ios::fixed);

cout<<setprecision(1)<<s<<endl;就会输出2.8  。

cout<<setprecision(2)<<s<<endl;会输出21.78。多个点!

cout<<setprecision(3)<<s<<endl;会输出20.784。

cout<<setprecision(6)<<s<<endl;会输出20.784391。

cout<<setprecision(7)<<s<<endl;会输出20.7843909。

cout<<setprecision(8)<<s<<endl;会输出20.78439090。

特别提示 :

(如果也再在这些语句后面加个两个语句:

cout<<1<<endl;

cout<<1.008<<endl;

猜到会输出什么吗?

第一条输出:1。

第二条为:1.00800000。

就是承接了setprecision(8)的这条规则语句,是浮点型的都会保留8个小数。是整型的还是整型!)

语句也可以写成:cout<<fixed<<setprecision(2)<<s<<endl;

       就算后面的语句没有写<<fixed,同样会按有<<fixed处理。

比如有语句:

cout<<fixed<<setprecision(2)<<s<<endl;

A:cout<<setprecision(7)<<s<<endl;

B:cout<<setprecision(8)<<s<<endl;

AB语句均会按保留7个,8个小数处理,不会再按有7或8个浮点数处理。

如果下面有语句c:

cout<<1.008<<endl;也会保留8个小数。

四:setprecision、showpoint与fixed

{cout<<fixed<<setprecision(2)<<123.456<<endl;//输出的结果是123.46 

比如:double s=20.7843909

1.有语句

cout<<setprecision(2)<<s<<endl;//输出21

cout<<fixed<<s<<endl;//输出20.78

2.有语句:

cout<<setprecision(2)<<s<<endl;//输出21

cout<<showpoint<<s<<endl;//输出21.(有个点)

 3.有语句:

 cout<<fixed<<s<<endl;//输出20.78391 

cout<<setprecision(2)<<s<<endl;//输出21 

5.有语句:

cout<<setprecision(2)<<s<<endl;//输出21 



C++ iomanip

阅读数 996

C++的头文件

阅读数 296

没有更多推荐了,返回首页