簡體   English   中英

四舍五入浮點值

[英]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.

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