我有一個浮點數,但我只想要數到2點的精度。我如何在C++中獲得這個?捨棄4個精確點?
float foo(float num) { // num=1234.567891
// code
return num2; // returns 1234.560000
}
我有一個浮點數,但我只想要數到2點的精度。我如何在C++中獲得這個?捨棄4個精確點?
float foo(float num) { // num=1234.567891
// code
return num2; // returns 1234.560000
}
一個簡單的方法是:
float foo(float num) {
return floor(num * 100)/100;
}
您也可以考慮:
float foo(float num) {
return (int)(num * 100)/100.0f;
}
有可能是負數的差異。我只能從你的問題得到的信息是,對於你想要的floor
(而不是round
例如)的正數。
您可以通過乘法和舍入/截斷來嘗試將浮點數四捨五入到一定的小數位數。
因此num = floor(num * 100.f)/100.f;
會嘗試截斷到小數點後兩位。
但是請注意,這與修正浮標的精度不一樣。根據定義,浮點數中的小數點浮點數爲。而且你只有大約7位數的精度。
因此,您的原始數字不能像「1234.567891」那樣精確 - 這對於浮動來說過於精確。
也許更重要的是,你從這樣一個函數的輸出可能也不準確。 「1234.56」不能用浮點數表示,所以返回的值不會是「1234.560000」。
數字的整數部分越大,小數點後面的數字越少。事實上,即使是中等數量的人數也不能代表任何小數部分。
浮點類型有它們自己的內部精度。你不能改變它。你可以通過各種方式來操作這個值,但最終浮點類型管理它們自己的精度,並且你不會限制它們的操作。即使你設法迫使一堆零進入某個值的低位,後續的計算仍然會使用完整的精度,並且你只在計算中引入一些隨機噪聲。
什麼你可以做的是控制在輸入和輸出的顯著位數。這幾乎總是管理精確度的正確方法。
不是一個C++的傢伙,但你可以乘以100乘以100作爲一個整數,然後投入爲一個浮動和除以100? –
這是一個選項嗎? 'int(num * 100)/(float)100' –
請問有什麼用途?如果您只想在小數點後打印兩個地方,只需查看輸出格式。 – StoryTeller