0

浮動小数点値を四捨五入しているときに、値にいくつかの不一致が見られました。コードの次の部分を抽出しました。ここで、 variablevar_dに value> 5.3 が割り当てられている場合、 variablevar_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;
}
4

2 に答える 2

2

使用する

double var_d=5.02;
long var_l = rint(var_d*100);

100 * 5.02 は 502 と正確に等しくないため、切り捨てられます。

より明確にするために: 5.02 には、2 進浮動小数点での正確な表現がありません。したがってvar_l*100 == 5.02*100、正確には 502 ではありません。実際には、501.99999999999994 に近い値です。整数にキャストすると、501 に切り捨てられます。

于 2013-05-16T12:01:08.807 に答える
-1
float var_d=5.02;
long var_l;
var_l = (long)(float)(var_d*100);

これは正しく動作するはずです

于 2013-05-16T12:22:01.777 に答える