float long类型转换
昨天遇到一件事情觉得很奇怪,基本确定是类型转换引起的,
刚刚写了一小段测试一下果真如此(c#.net)
float a=8.15f;
long b= (long)(a*1000);
结果b=8149
又用其他几个值测试了一下,基本正常,但是当a*1000的最后一位是0时就会出现比预计值少1的情况
如 8150-8149
8160-8159
类推
谁知道是什么原因呢,如果是位数过多什么还能从类型的长度去考虑,现在很晕
------解决方案--------------------
这篇文章好一点
Java中用浮点型数据Float和Double进行精确计算时的精度问题
http://www.cnblogs.com/n-u-l-l/archive/2012/05/12/2497063.html
C#也有同样问题,所有语言都有同样的问题,只要计算机是二进制的。