ostream中的负精度值

时间:2009-12-24 09:24:17

标签: c++ floating-point stream precision

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

double pi = 3.14159265;

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

cout << pi << endl;

我已经尝试过并使用GCC,似乎忽略了精确值,但我很好奇是否有关于这种情况会发生什么的官方路线。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我无法在C++03C++0x (N3092)的草稿中找到此行为的任何规范。但是,C89标准说

  

7.19.6.1 fprintf功能

     

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

我希望C ++ std :: ostream行为与C I / O printf一致。 fprintf和相关功能。

使用Visual C ++ 10.0和GCC 4.4.1进行快速测试表明它是这种方式,负精度意味着精度被省略。并且,省略精度意味着表125

27.5.4.1 basic_ios构造函数中指定的 6 位置的默认值