曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3959|回复: 0
打印 上一主题 下一主题

浮点数与输出格式化

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-6-19 13:44:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在默认情况下,C++ 用 6 位数字输出一个浮点数,这 6 位数字包含了整数部分和小数部分,如 3.14159, 13.4159 。

可以通过 cout 调整这种行为:

1. 使用 precision 函数限制被输出的数的位数不超出多少个,如:
[Plain Text] 纯文本查看 复制代码
std::cout.precision(4);
std::cout << 3.14159;

输出的结果是:3.142 (这里有四舍五入)。

2. 第 1 种方法不能将小数点后的位数限制为固定的个数,要达到这个目的,在设置精度之前还需用以下语句设置一下:
[Plain Text] 纯文本查看 复制代码
std::cout.setf(std::ios::fixed);
std::cout.setf(std::ios::showpoint);
std::cout.precision(3);

第 1 条语句,应该使用定点记号(与浮点记号相对)。
第 2 条语句,在输出时不得省略小数点(这是对实数而言,整数永远没有小数部分)。
第 3 条语句,把精确度设置为小数点后面有几位,这里是 3 位。

示例代码
[C++] 纯文本查看 复制代码
#include <iostream>

int main(void)
{
    std::cout << 3.141592653 << '\n';

    std::cout.precision(4);
    std::cout << 3.141592653 << '\n';

    std::cout.precision(3);
    std::cout << 3.141592653 << '\n';

    std::cout.setf(std::ios::fixed);
    std::cout.setf(std::ios::showpoint);
        std::cout.precision(3);
    std::cout << 10.3898 << '\n';
    std::cout << 9.12356 << '\n';    

    return 0;
}

运行输出:
$ ./formatnum
3.14159
3.142
3.14
10.390
9.124
由上可见,由于有了 std::cout.setf(std::ios::fixed); 这条语句,才使得小数点后的位置被固定为 std::cout.precision(3); 中设置的位数(这里是3位) ,否则仍然是将输出总共只有 3 位的数值。因此,在规定了定点记号(这里是小数点)后,精度设置 precision(x) 就被钳制发生在这个定点记号之。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-18 00:41 , Processed in 0.063750 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表