我尝试分割任意数量的两位数,并得到两个不同变量的结果。我遇到了一个特定号码的问题:23
。
int root = 23;
float div = (float)root/10.0; // div = 23.0/10.0 = 2.3
int left = (int)div; // left = 2
int right = ((float)div - (float)left) * 10.0; // right = (2.3 - 2) * 10.0 = 0.3 * 10.0 = 3
printf("%d", right); // 2, why ?
有很多浮点到操作,最终结果我遇到了一些麻烦。我想念或者没有抓到什么吗?
答案 0 :(得分:6)
由于0.3可能无法完全以二进制形式表示,因此最终会得到2.9999 ...转换为2
时会变为int
。
相反:
int root = 23;
int left = root / 10;
int right = root % 10;