2011-09-27 168 views
2

可能重複:
Why can't I return a double from two ints being divided爲什麼1/10等於零,除非我使用變量?

本聲明用C用gcc:

float result = 1/10; 

產生的結果爲0。

但是,如果我定義變量和b值分別爲1和10,然後做:

float result = a/b; 

我得到的0.1

預期的應答是怎麼回事?

+0

變量'a'和'b'有什麼類型? –

+6

你應該嘗試'float result = 1.0/10.0;' – CAbbott

+1

我認爲這是因爲1/10在編譯時已經解決了,因爲你沒有指定任何十進制數,編譯器認爲它是整數。試着製作1.0/10.0 – rnunes

回答

11

/運算符應用於兩個整數時,它是一個整數除法。因此,1/10的結果爲0.

/運算符應用於至少一個浮點變量時,它是一個浮點除法。你打算的結果是0.1。

實施例:

printf("%f\n", 1.0f/10); /* output : 0.1 (the 'f' means that 1.0 is a float, not a double)*/ 
printf("%d\n", 1/10); /* output : 0 */ 

實施例與變量:

int a = 1, b = 10; 

printf("%f\n", (float)a/b); /* output : 0.1 */ 
+2

要進一步說明:float result = 1/10.0會給出預期的結果。 –

4

這是因爲110是積分常數,所以除法使用整數運算來完成。

如果至少有一個變量abfloat,它將使用浮點算法完成。

如果你想用數字文字做到這一點,使用符號,使他們float文字,例如中的至少一個:

float result = 1.0f/10; 

或澆鑄其中之一float,這將是一個一點更詳細:

float result = 1/(float)10; 
4

1和10都是整數,並將返回一個整數,當您定義a和b您定義爲一個浮點數。如果你使用1.0和10.0,它將返回正確的結果

0

如果你想浮動,就像下面這樣拋出它。

float result =(float)a/b;

相關問題