[英]Rounding off floating point values
在四舍五入浮點值時,我發現值存在一些差異。 我已經提取了以下部分代碼。 在這里,如果給變量var_d
賦值> 5.3,那么我將為變量var_d
獲得適當的值,但是對於5.01和5.02這樣的值,我分別獲得500和501。
#include<stdio.h>
int main()
{
double var_d=5.02;
long var_l;
var_l = (double)(var_d*100);
printf("var_d : %f var_l= %ld\n ",var_d,var_l);
printf("result : %ld\n",var_l);
return 0;
}
采用
double var_d=5.02;
long var_l = rint(var_d*100);
由於100 * 5.02並不完全等於502,因此您需要四舍五入。
更清楚一點:5.02在二進制浮點數中沒有確切的表示形式。 因此, var_l*100 == 5.02*100
並非完全為502。實際上,它更接近501.99999999999994。 將其轉換為整數時,將四舍五入為501。
float var_d=5.02;
long var_l;
var_l = (long)(float)(var_d*100);
這應該正常工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.