标签:
int num =(int) f*100;
结果是:输入f = 1.23, 输出 num = 122.
输入f = 1.25 输出 num =125
这就是著名的double精度损失问题。
因为1.23在计算机里面只能表示为近似值:1.2299999999.........
而1.25却能被精确的表示:
解决的办法是:
int num = (int)(f*100+0.0001),这个0.0001根据你需要的精度来设置,是可以改变的
这时候,不管f=1.23还是f=1.25,结果都是我们想要的123和125.
关键是要理解: 10110101 只是近似等于 1.0110101 * 2^7.
int float double 之间的关系是 int可以隐式转换成double 和float;
float只能强制转换成int 但是可以隐式转换成double;
double只能强制转换成int和float
int与float之间的转换精度会缺失 当int——>float——>int时 两个int已经不相等了
double与float之间的转换精度也会缺失 当double——>float——>double时 两个double不相等了
::::计算机以二进制存储数据 小数的二进制有可能会丢失数据 所以会存在误差 而int型二进制会除尽 不存在误差
标签:
原文地址:http://www.cnblogs.com/zhangying/p/3870998.html