我对c中的模数有点困惑。尝试以下示例:
double d = 4912;
int a;
a = (int) d%100;
printf ("%d \n", a);
答案是12.很好,这就是我所期待的。现在我试试这个:
double d = 49.12;
d = d*100;
int a;
a = (int) d%100;
printf ("%d \n", a);
答案:12。再一次,我所期待的。但现在:
double d = 49.12;
int a;
a = (int)(d*100)%100;
printf ("%d \n", a);
答案:11!这绝对不是我的预期。但我不明白为什么。 OO
答案 0 :(得分:4)
double
作为64位浮点数不能表示编码为文本的每个数字。在can中可以准确地编码大约2个 64 个不同的数字。 49.12
不是其中之一。
鉴于大多数double
的二进制性质,最接近的double d
值约为49.119999999999997
。
(int)(d*100)%100
的结果就是11。
在另一个平台上,结果可能是12。