可能重複:
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
預期的應答是怎麼回事?
可能重複:
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
預期的應答是怎麼回事?
當/
運算符應用於兩個整數時,它是一個整數除法。因此,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 */
要進一步說明:float result = 1/10.0會給出預期的結果。 –
這是因爲1
和10
是積分常數,所以除法使用整數運算來完成。
如果至少有一個變量a
和b
是float
,它將使用浮點算法完成。
如果你想用數字文字做到這一點,使用符號,使他們float
文字,例如中的至少一個:
float result = 1.0f/10;
或澆鑄其中之一float
,這將是一個一點更詳細:
float result = 1/(float)10;
1和10都是整數,並將返回一個整數,當您定義a和b您定義爲一個浮點數。如果你使用1.0和10.0,它將返回正確的結果
如果你想浮動,就像下面這樣拋出它。
float result =(float)a/b;
變量'a'和'b'有什麼類型? –
你應該嘗試'float result = 1.0/10.0;' – CAbbott
我認爲這是因爲1/10在編譯時已經解決了,因爲你沒有指定任何十進制數,編譯器認爲它是整數。試着製作1.0/10.0 – rnunes