cout格式控制输出float/double浮点数

{
            float test = 1.234;
            std::stringstream ss;
            ss << test;
            std::string str_test;
            str_test = ss.str();
            std::cout<< ss.str()<<std::endl;
            std::cout <<test<<std::endl;
            std::cout<<std::setprecision(str_test.length())<<test<<std::endl;
            std::cout <<std::fixed<<test<<std::endl;
            std::cout <<std::setprecision(10)<<test<<std::endl;
}

结果是这样的:

1.234
1.23399996757507324218750000000000000
1.23400
1.23400
1.2339999676

cout的格式控制,多出的部分,有可能是填充随机数,也可能是填充0
 

            double test = 1234567890.123456;
            printf("%lf\n",test);
            printf("%.16lf\n",test);
            std::stringstream ss;
            ss << test;
            std::string str_test;
            str_test = ss.str();
            std::cout<< ss.str()<<std::endl;
            std::cout<< std::setprecision(ss.str().length())<<ss.str()<<std::endl;
            std::cout <<test<<std::endl;
            std::cout <<std::fixed<<test<<std::endl;
            std::cout <<std::setprecision(16)<<test<<std::endl;

结果是这样的:

1234567890.123456
1234567890.1234560012817383
1.23457e+09
1.23457e+09
1234567890.12345600128
1234567890.12345600128
1.23457e+09

结论:直接cout浮点数,后面小数点位数不对,以后就把浮点数转换为string,然后输出,就像下面这样

double test = 1234567890.123456;
std::stringstream ss;
ss << std::fixed <<test;
std::cout<< ss.str()<<std::endl;

结果是这样的:

1234567890.123456

就这么干!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值