我不明白,爲什麼從math.h
是不是就roundf()
功能一輪donation
變量,而這輪livestockPM
沒有問題。我需要爲其他計算使用四捨五入的值,但我使用printf
來檢查值是否正確,並且它只是返回錯誤的值(不包括變量donation
)。另外,變量final
只返回值,如果四捨五入爲.00,那麼無論什麼變量farmer1
,2,3都成立。爲什麼不roundf()四捨五入浮點值,爲什麼int - float數學運算返回錯誤的值?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int farmer1 = 9940;
int farmer2 = 4241;
int farmer3 = 7779;
float livestockPM = (float)farmer1/(float)farmer2;
printf("livestock: %f\n",livestockPM);
livestockPM = roundf(livestockPM * 100)/100;
printf("livestock rounded: %f\n",livestockPM);
float donation = (float)livestockPM * (float)farmer3;
printf("donation: %f\n", donation);
donation = roundf(donation * 100.00)/100.00;
printf("donation rounded: %f\n", donation);
float final = donation * (float)farmer2;
printf("final: %f\n", final);
return 0;
}
輸出:
livestock: 2.343787
livestock rounded: 2.340000
donation: 18202.859375
donation rounded: 18202.859375
final: 77198328.000000
任何人有任何想法,爲什麼?我在想因爲float與float相乘,但我似乎無法像這樣工作。我嘗試從整型變量中刪除(float),但結果也不理想。謝謝。
'float'只有6位或7位數的精度。將所有'浮動'改爲'雙',並使用'round',而不是'roundf'。 – user3386109
@ user3386109謝謝,實際工作! – Holsen