2017-06-16 121 views
-1

我需要這樣做的右手(不圓,地板或小區):添加零的浮點數

例如:

1.58700023(16位)

預計1.58700000

我正在做這個操作:(值-32768.0)/ 32768轉換爲(字節值爲浮點數的實際值)int他的轉換有這個錯誤= X.00000023或其他

+0

可能重複[浮點數學是否被破壞?](https://stackoverflow.com/questions/588004/是浮點數學打破) – Olaf

回答

0

我假設你想實現與原語的舍入。

舍入爲小數點後四位,與10e4相乘,轉換爲整數(有效截斷或去除小數),然後除以浮點值10e4,該值將結果再次轉換爲浮點數。例如:

#include <stdio.h> 

int main() 
{ 
    double f = 1.58700023; 
    printf("%10.10f\n", f); 

    // Round to 4 decimal places 
    double r = (int)(f*10000.0)/10000.0; 
    printf("%10.10f\n", r); 

    return 0; 
} 

此輸出:

1.5870002300 
1.5870000000 

有沒有這個程序支持的許多邊緣的情況下,雖然。例如,您可能需要添加1/10e4的一半來執行舍入到最接近的下一個數字等。

+0

不工作:結果 1.58700023 1.58799997 –

1

這是很po可能你不能用浮游物來做這件事。請注意,並非所有值都可以精確地表示爲float:畢竟它僅限於32位(通常)。

對於打印,你應該能夠使用:

printf("%.3f", 1.58700023); 

這將通過四捨五入的值轉換成字符串打印1.587

+0

這將是一個不錯的主意,指出如何比較可以解決(就像你提出了一個打印的修復程序,因爲我猜這肯定是一個問題) –

+0

不爲我工作:導致 1.58700023 1.58799997 編輯:我使用浮動 –

+0

雙作業操作對我的罰款 –