[英]Floating point in C
我向用戶詢問C中的兩個非負整數值。然后,我想將它們轉換為百分比(以小數表示)。 不幸的是,我的float
變成零。 為什么會這樣,我該如何解決?
int a = 5;
int b = 10;
int total = a + b;
float a_percent = a / total;
float b_percent = b / total;
printf("%.2f, %.2f\n", a_percent, b_percent);
您沒有使用浮點數,而是使用了整數,因此整數除法給出了零( 然后將其分配給浮點數)。
要執行浮點運算,必須首先將整數(或其中至少一個)轉換為浮點數。 方便地,我們只使用total
:
float total = a + b; // exact
float ap = a / total;
float bp = b / total; // OK, these are now floating-point operations
除了其他人指出的問題外,該比率直到您乘以100.0才算是百分比。
一個int
除以一個int
將始終返回一個int
。 在除法之前,必須使兩個參數之一成為float
:
float a_percent = (float) a / total;
float b_percent = (float) b / total;
我不是C專家,但是我的猜測是因為將一個整數除以一個整數總是會得到一個整數。
您可能需要執行以下操作:
float a_percent = (float)a/total;
float b_percent = (float)b/total;
您首先要執行整數除法,然后將結果轉換為浮點數。 這不會給出您想要的結果。 在執行除法之前,要么使total
浮點值開始(以便類型自動升為正確),要么將a
和b
為(float)
。
您在此處使用的是整數數學而不是浮點數。 嘗試:
float a_percent = a/(float)total;
float b_percent = b/(float)total;
對於一個簡單的百分比,您可能會更喜歡使用定點。 只需將分子(a或b)乘以100,就可以從除法得到百分比。 外匯:
int a = 5;
int b = 10;
int total = a + b;
int a_percent = 100*a/total;
int b_percent = 100*b/total;
printf("a%%=%d, b%%=d\n", a_percent, b_percent);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.