簡體   English   中英

C中的浮點

[英]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浮點值開始(以便類型自動升為正確),要么將ab(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM