注意:我知道有一些类似的问题,但我找不到我在这里问的答案。
我想打印一个双精度到一个std :: ostream四舍五入到+ oo或-oo,带有n个小数位。
乘以10 ^ n,floor'ing或ceil'ing,然后将结果乘以10 ^ -n不是一个选项,因为结果可能无法表示。
到目前为止我的内容如下:
#include <iostream>
#include <cfenv>
int main()
{
double one_third = 1.0/3.0;
std::cout.precision(4);
fesetround(FE_DOWNWARD);
std::cout << one_third << std::endl;
fesetround(FE_UPWARD);
std::cout << one_third << std::endl;
}
gcc-4.7.2的输出如下:
0.3333
0.3333
我在期待:
0.3333
0.3334
这个代码有什么问题?
谢谢!
答案 0 :(得分:3)
编辑:这必须是GCC 4.7.2错误。该代码在GCC 4.8.1中工作正常,但在4.7.2中失败。
此代码(example on ideone.com)适用于GCC 4.8.1:
#include <iostream>
#include <cfenv>
int main()
{
double one_third = 1.0/3.0;
std::cout.precision(4);
std::fesetround(FE_DOWNWARD);
std::cout << one_third << std::endl;
std::fesetround(FE_UPWARD);
std::cout << one_third << std::endl;
return (0);
}
节目输出:
0.3333
0.3334