3

这更像是一个好奇的问题,但有谁知道在 C++ 中如何处理负精度值?例如:

double pi = 3.14159265;

cout.precision(-10);
cout.setf(ios::fixed, ios::floatfield);

cout << pi << endl;

我已经尝试过并使用 GCC,似乎精度值被忽略了,但我很好奇在这种情况下是否有一些官方说法。

4

2 回答 2

3

奇怪的是(并且错误地,恕我直言)C++ 标准指定了一个有符号类型(streamsize)作为精度参数,因此它不会被转换为一个大数。但是,该标准没有说明负数可能意味着什么,如果有的话。

于 2009-12-24T12:18:01.287 回答
1

我在C++03和C++0x (N3092)草案中都找不到这种行为的任何规范。但是,C89标准说

7.19.6.1 fprintf 函数

采用负精度参数,就好像省略了精度一样。

我希望 C++ std::ostream 行为与 CI/O printf 一致。fprintf 和相关函数。

使用 Visual C++ 10.0 和 GCC 4.4.1 进行的快速测试表明它是这种方式,负精度意味着省略了精度。并且,省略精度意味着默认值是6 个位置,如 表 125中的27.5.4.1 basic_ios 构造函数中所指定

于 2010-04-08T09:49:57.487 回答