2011-07-11 98 views
2

我有一個API調用,它返回一個double。雙倍數的小數長度可以從小數點到小數點(這一切都歸結爲執行器的狀態)。這個double表示執行器範圍半徑上的當前位置。 我對這樣一個詳細的數字不感興趣,因爲它給系統增加了很多噪音。 我一直在使用浮動來節省空間,但我仍然有浮動6-8小數的長度。 我對樓層或小區不感興趣,只是因爲它沒有做我想要的工作。 例如,我有數字:C++如何設置浮點數的固定小數精度

-2.05176 
-0.104545 
0.30643 
0.140237 
1.41205 
-0.176715 
0.559462 
0.364928 

我想精度設置爲2位小數不管。 我不是在說std :: cout的輸出精度,我知道如何設置它。我正在談論浮動的實際精度。即:我感興趣的是具有0.XX格式和0.XX00000000000實際精度的花車。 因此轉換上述名單:

-2.05 
-0.10 
0.30 
0.14 
1.41 
-0.17 
0.55 
0.36 

我知道升壓有一個數值轉換的模板,但我無法弄清楚如何從浮動轉換使用低精度浮動。有人可以幫忙嗎?

+0

可能重複的[舍入數爲2位小數在C](http://stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c) –

回答

4

你就不能繞着它。

float round(float num, int precision) 
{ 
    return floorf(num * pow(10.0f,precision) + .5f)/pow(10.0f,precision); 
} 
+0

謝謝你的工作完美! –

+0

這太好笑了。你的浮游物通過實施固定的精確度。如果你想精確值使用整數。否則,你應該在打印時將數值四捨五入,並且輸出函數具有內置的功能。 –

+0

我不知道你剛纔所說的Martin。謹慎解釋?正如我所說的,我對打印值不感興趣,但將它們舍入到2點精度並進行比較。 –

2

float和double的精度取決於硬件。其他任何東西都需要用軟件編碼。

你可以嘗試縮放相反,在整數工作:

-205 
-10 
    30 
    14 
141 
-17 
    55 
    36 
+0

我想到了縮小,但它也不夠準確。例如,如果執行機構的範圍從-1.50到3.50,我只需要兩位小數範圍,更重要的是隻增加噪音,更不用說泛化太多。 –