C++中小数点输出格式

在《算法竞赛入门经典》一书中

习题1-5 打折 (discount)
一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。

我编写的代码为

#include<iostream>
#include<iomanip>
using namespace std;
int main(void){
    double s;
    cin>>s;

    if(s*95>=300){
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<s*95*0.85<<endl;
    } 

    else{
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<s*95<<endl;
    }

    return 0;
}

于是将C++中如何显示不同格式的小数查了一下:

Floating point output can be changed with

<< setiosflags( ios::fixed ) : never use scientific notation //绝对不使用科学记数法。

<< setiosflags( ios::scientific ) : always use scientific notation //使用科学记数法。

<< resetiosflags( ios::floatfield ) : restores default (use fixed or scientific notation based on the precision)//重置为缺省。

<< (re)setiosflags( ios::showpoint ) : controls if the trailing zeros and decimal point will be output (default is no) //控制小数点后面的零是否显示。

<< setprecision( digits ) : if fixed or scientific format is selected, controls the number of digits after the decimal place, otherwise controls the total number of significant digits// 如果fixed或者scientific已经确定了,则控制小数点后面的位数;否则,控制所有位数。

#include <iostream>
#include <iomanip>
using namespace std;

int main(void){
    double S = 0.000000123;
    double A = 456.7;
    double B = 8910000000000.0;

    cout << "default precision is "
         << cout.precision() << endl;    // 6

    cout << "    S = " << S << endl;    // 1.23e-07
    cout << "    A = " << A << endl;    // 456.7
    cout << "    B = " << B << endl;    // 8.91e+12

    cout << setiosflags(ios::showpoint)
         << "ios::showpoint ON" << endl;

    cout << "    S = " << S << endl;    // 1.23000e-07
    cout << "    A = " << A << endl;    // 456.700
    cout << "    B = " << B << endl;    // 8.91000e+12

    cout << resetiosflags(ios::showpoint)
         << "ios::showpoint OFF" << endl;
    cout << setiosflags(ios::fixed)
         << "ios::fixed ON" << endl;

    cout << "    S = " << S << endl;    // 0.000000
    cout << "    A = " << A << endl;    // 456.700000
    cout << "    B = " << B << endl;    // 8910000000000.000000

    cout << resetiosflags(ios::fixed)
         << setiosflags(ios::scientific)
         << "ios::scientific ON" << endl;

    cout << "    S = " << S << endl;    // 1.230000e-07
    cout << "    A = " << A << endl;    // 4.567000e+02
    cout << "    B = " << B << endl;    // 8.910000e+12
}

输出为:

default precision is 6
    S = 1.23e-007
    A = 456.7
    B = 8.91e+012
ios::showpoint ON
    S = 1.23000e-007
    A = 456.700
    B = 8.91000e+012
ios::showpoint OFF
ios::fixed ON
    S = 0.000000
    A = 456.700000
    B = 8910000000000.000000
ios::scientific ON
    S = 1.230000e-007
    A = 4.567000e+002
    B = 8.910000e+012

--------------------------------
Process exited after 0.02482 seconds with return value 0
请按任意键继续. . .

参考

https://www.cs.duke.edu/courses/cps149s/fall99/resources/n2.html

时间: 2024-12-10 00:24:27

C++中小数点输出格式的相关文章

loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分

$ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinobu 早有准备,Alice.Ayaya.Karen.Shinobu.Yoko 五人又能继续愉快地玩耍啦! 「噢--!不是有放上天的烟花嘛!」Karen 兴奋地喊道. 「啊等等--」Yoko 惊呼.Karen 手持点燃引信的烟花,「嗯??」 Yoko 最希望见到的是排列优美的烟火,当然不会放过这个机会-

C#中Console.WriteLine()函数输出格式详解

格式项都采用如下形式: {index[,alignment][:formatString]} 其中"index"指索引占位符,这个肯定都知道: ",alignment"按字面意思显然是对齐方式,以","为标记: ":formatString"就是对输出格式的限定,以":"为标记. alignment:可选,是一个带符号的整数,指示首选的格式化字段宽度.如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,

【MySQL笔记】SQL优化利器 - explain命令的输出格式详解

有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景下(如多表联合查询几十个字段并做group或sort等操作),人工check SQL语句通常很难发现SQL瓶颈根源.这个时候,MySQL提供的explain命令就派上用场了. 本笔记主要对explain的输出结果做说明,并给出根据explain输出对SQL做优化的思路. 1. EXPLAIN语法及用途 e

nmap 输出格式过滤小工具

想用nmap 扫描ip段输出一个干净的 IP:PORT格式的文件.于是写了个简单脚本. import xml.dom.minidom import sys import getopt statstr="" statstrlist=["open"] infile="" outfile="" infileflag=0 outfileflag=0 statstrflag=0 isstatflag=0 helpflag=0 #chu

C语言的一些输出格式

%e      printf()的一种输出格式 科学表示的一种浮点数 1.24==1.240000e+000 1240000==1.240000e+006                        指数不得超过3位数 0.00124==1.240000e-003 %g printf()的一个输出格式类型,它表示以%f,%e中较短的输出宽度输出单.双精度实数,在指数小于-4或者大于等于精度时使用%e格式 (%g用于打印浮点型数据时,会去掉多余的零,至多保留六位有效数字(不同于%e的默认保留小数

geoserver 数据图层输出格式

1.WMS服务请求参数 一般WMS的请求地址如下: http://localhost:8080/geoserver/topp/wms?service=WMS&versi on=1.1.0&request=GetMap&layers=topp:states&styles=&bbox=- 124.73142200000001,24.955967,-66.969849,49.371735&width=780&height=330 &srs=EPSG

[转] C/C++中printf和C++中cout的输出格式

原文地址 一. Printf 输出格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示:表示输出类型的格式字符 格式字符意义a                                                                  浮点数.十六进制数字和p-计数法(C99)A                          

C语言输出格式总结(转)

C语言输出格式总结 本文转自 静沙 的博客.因为文章很难找到,所以记作随笔. 1 一般格式 printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息: ①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出. ②普通字符,即需要原样输出的字符. (2)“输出表列”是需要输出的一些数据,可以是表达式 (3) printf函数的一般形

自定义输出格式

自定义输出数据的格式.输出路径.输出文件名 输出格式OutputFormat 1.OutputFormat 抽象类 2.FileOutputFormat 文件输出格式 3.TextOutputFormat 文本格式的文件输出格式 4.SequenceFileOutputFormat 普通序列文件输出格式 5.SequenceFileAsBinaryOutputFormat 二进制序列文件输出格式 6.FilterOutputFormat 过滤器输出格式 7.DBOutputFormat 数据库输