lat*1e6精度还是不对
来源:3-3 数据类型之浮点类型【实际应用技巧】

奥利给666
2020-12-04
mac电脑,clion,编译器选的是C11
int main(int argc, char **argv) {
float a_float = 3.13f;
float lat = 39.90815f;
int lat06 = (int)(lat * 1e6);
printf("%d\n", lat06);
printf("%d\n", lat06 - (int)lat*1e6);
return 0;
}
输出结果是
39908149
73896
最后三位并不是预想的150
写回答
2回答
-
lat06 - (int)lat*1e6 这个就更没道理了。后面的操作数会先把 lat 强转为 39,再乘以 1e6,这时候实际上得到了 double 类型,用 %d 格式化出来的 73896 没有意义。
012020-12-05 -
bennyhuo
2020-12-04
放到 39.908 的后面,149 和 150 其实没差什么,最后一位本身就是是不可靠的。另外,你要想验证浮点型精度,不要乘以 1e6,往整型转换的过程中本身会产生数值的截断。
00
相似问题