2012-10-20 67 views
0

我正在學習操作系統編程,我需要假設我沒有什麼資源。如果不使用庫,我怎樣才能將一個浮點數整數到C中的兩個地方?

那麼我應該如何計算2/3並截斷到兩位小數?有沒有可能使用的數學算法或位操作技巧?

+0

你是什麼意思的少數資源?它似乎並沒有與問題聯繫在一起。 – nhahtdh

+0

一個問題是:你甚至希望使用浮點運算在你的操作系統?有一些併發症。如果您想完全避免浮動,您可能需要查看十進制數字的定點表示。 – nneonneo

回答

5

不能全面浮點數爲10個進制兩個地方或任何基數爲10的位數,浮點數只是近似值。有很多基數爲10的數字,只是不能完全表示爲基數爲2的小數位數有限的數字,這是出於同樣的原因,您無法用基數10中的數字1/3來表示有限數量的小數位。您應該將您作爲近似值浮動,然後僅將其作爲顯示的一部分。或者如果你不想近似,然後做一些事情,比如使用整數來代表1/100的數值,然後將它們除以100來獲得顯示值。

0

圓到小數點後兩位:乘100,轉換由100.0爲整數,除(但請注意,你不能在一般的浮點數說,在其本機表示,恰好有兩個基本十位之後小數點;那些不需要是本地表示的整數)

因此,我實際上會爭辯說,乘以100並存儲爲一個整數並理解爲代表100個單位,是一個整數更準確地表示「精確到小數點後兩位的數字」。

+0

這不輪。轉換爲整數截斷。 –

-1

我的一個策略是將浮點數(如2/3)乘以(10^precision),並通過將其轉換爲int來截斷它。

1

如果你不打算操縱變量(只是打印出來),你也可以使用:

printf("%.2f", 2/3); 
0
// this is an old trick from BASIC 
// multiply by 100.0 and add 0.5 (the 0.5 is for the rounding) 
// normally you want to round rather than truncate for a more accurate result 
// take the integer value of this to get rid of additional decimal places 
// then divide by 100.0 to get the original number back only rounded 
// of course you need to use floating point 

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    double a=1.0, b=2.0, c=3.0; 
    a = (int)((b/c)*100.0+0.5)/100.0; 
    printf("%f\n",a);  // print all digits of a 
    printf("%10.2f\n",a); // print only 2 decimal points of a 
    return 0; 
} 
+1

'的printf( 「%F \ n」 個,一個);'確實** **不打印A'的'所有數字。 '的printf(「%53F \ n」,一個);'打印了''的所有數字,正如你可以看到自己,這是不是漂亮:'0.67000000000000003996802888650563545525074005126953125' –

相關問題