曲径通幽论坛

标题: 浮点数与输出格式化 [打印本页]

作者: beyes    时间: 2011-6-19 13:44
标题: 浮点数与输出格式化
在默认情况下,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) 就被钳制发生在这个定点记号之。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2