在默认情况下,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) 就被钳制发生在这个定点记号之。 |