我有一个情况:我怎样才能得到一个双精度值?
void foo(const double d)
{
const double rounded_2_decimals = std::round(d*100.0)/100.0;
std::cout << "d=" << d << std::endl;
std::cout << "r=" << rounded_2_decimals << std::endl;
}
打印时,d=3.125
,但r=3.12
而不是r=3.13
。
我怀疑是因为d
传递的其实是3.1249999 ....这就是为什么我把最初的清点,所以我可以看到在传递的“真”值。它显示之前是否std::cout
一轮值他们?我还有什么可以看到通过的“真实”价值?
我的坏,'round'总是舍入远离零。使用'std :: setprecision',或者打印为hexfloat。 –
std :: round()的定义不是从零开始?有没有办法改变“舍入模式”? –
你是对的(我错误的问题是'foo(3.125)'printing 3.12),然后没有查找'std :: round',因为对于这种行为的唯一可能的解释是四舍五入到偶数) –