老鸟进来分析下,初学者进来学习下
老鸟进来分析下,菜鸟进来学习下int i (int)(float.Parse(0.005)*1000)这个i的值是多少?别放代码里去试
老鸟进来分析下,菜鸟进来学习下
int i = (int)(float.Parse("0.005")*1000)
这个i的值是多少?
别放代码里去试,凭直觉直接说出来
[解决办法]
4或者5
[解决办法]
5吗?
[解决办法]
浮点运算是会有精度问题的。而转换int的时候,会忽略精度。所以有可能会使结果小于预期值
[解决办法]
这样应该是正确的
C# codeint i = int.Parse((float.Parse("0.005") * 1000).ToString());
[解决办法]
[解决办法]
肯定是5...
[解决办法]
晕 试了下 是5...
[解决办法]
是4...
[解决办法]
5可能性比较大
反过来想也有可能为0
[解决办法]
你猜这个的结果是啥?
C# code(0.005f * 1000)-5f
[解决办法]
想了一定是5
不可能是0看错精度
[解决办法]
第一个(int)(float.Parse("0.005")*1000)
其中首先内存里先生成0.005的2进制32代码,然后再做乘法运算,因为0.005的2进制运算是无限的。所以在运算过肯定有进位,那么肯定是数据丢失,可以肯定的是运算过后的5是一个接近与5的近视数字,实际上应该是4.9999。。。 那么这时候做int转化的时候就是4了
[解决办法]
应该是5
[解决办法]
18楼分析的很牛逼,学习了
[解决办法]
有可能4
[解决办法]
[解决办法]
0.005的二进制是1.010001111010111000010100100011110101...E-8
float能表示的有效二进制为只有23位,所以红色的部分舍掉了。所以实际内存中的数比0.005小,是
0.00499999988824129
[解决办法]
脑筋急转弯
[解决办法]
是5啊。代码测试过了。
[解决办法]
当然是5了
[解决办法]
lz帮你加到100分了,你懂得