我有一個情況:我怎樣才能得到一個雙精度值?
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',因爲對於這種行爲的唯一可能的解釋是四捨五入到偶數) –