这更像是一个好奇的问题,但有谁知道在 C++ 中如何处理负精度值?例如:
double pi = 3.14159265;
cout.precision(-10);
cout.setf(ios::fixed, ios::floatfield);
cout << pi << endl;
我已经尝试过并使用 GCC,似乎精度值被忽略了,但我很好奇在这种情况下是否有一些官方说法。
这更像是一个好奇的问题,但有谁知道在 C++ 中如何处理负精度值?例如:
double pi = 3.14159265;
cout.precision(-10);
cout.setf(ios::fixed, ios::floatfield);
cout << pi << endl;
我已经尝试过并使用 GCC,似乎精度值被忽略了,但我很好奇在这种情况下是否有一些官方说法。
奇怪的是(并且错误地,恕我直言)C++ 标准指定了一个有符号类型(streamsize)作为精度参数,因此它不会被转换为一个大数。但是,该标准没有说明负数可能意味着什么,如果有的话。
我在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 构造函数中所指定