double v = 52428.8; var v1 = v * 2; var v2 = v * 3; Console.WriteLine(v1); Console.WriteLine(v2); Console.ReadLine();
如上代码
本人调试时发现v2在得到计算结果的时候变成了 157286.40000000002 这个啥情况啊 怎么样解决呢?
解决方案
5
这个的确,原因是二进制有时候不能精确的表示十进制的浮点数,所以会出现很小的偏差,但是你输出的时候可能汇给你略掉,或你可以按照本人的意愿输出
5
浮点数是不精确的
你可以用decimal,这个的精度比double更高
你可以用decimal,这个的精度比double更高
5
这是浮点数的特点
可以根据需要对数据输出位数进行限制
例如 ToString(“F2”) //保留2位小数
可以参考
http://blog.csdn.net/tpriwwq/article/details/13017947
可以根据需要对数据输出位数进行限制
例如 ToString(“F2”) //保留2位小数
可以参考
http://blog.csdn.net/tpriwwq/article/details/13017947
5
如上面说的,浮点数的确会有很多000000000002之类的小数,但是输出的时候,157286.40000000002 并不会输出为157286.40000000002 ,而是157286.4。即,net本身有进行了精度舍入,以降低进制转换导致的非必要精度