关于double 运算后多出很多小数的问题

zmidl 2016-05-27 01:21:36

double v = 52428.8;
var v1 = v * 2;
var v2 = v * 3;
Console.WriteLine(v1);
Console.WriteLine(v2);
Console.ReadLine();

如上代码
我调试时发现v2在得到计算结果的时候变成了 157286.40000000002 这个啥情况啊 如何解决呢??
...全文
6286 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
我叫小菜菜 2016-05-27
  • 打赏
  • 举报
回复
引用 4 楼 xian_wwq 的回复:
这是浮点数的特点 可以根据需要对数据输出位数进行限制 比如 ToString("F2") //保留2位小数 可以参考 http://blog.csdn.net/tpriwwq/article/details/13017947
如上面说的,浮点数的确会有很多000000000002之类的小数,但是输出的时候,157286.40000000002 并不会输出为157286.40000000002 ,而是157286.4。即,net本身有进行了精度舍入,以降低进制转换导致的非必要精度
xian_wwq 2016-05-27
  • 打赏
  • 举报
回复
这是浮点数的特点 可以根据需要对数据输出位数进行限制 比如 ToString("F2") //保留2位小数 可以参考 http://blog.csdn.net/tpriwwq/article/details/13017947
songbing774933 2016-05-27
  • 打赏
  • 举报
回复
至于为什么浮点数都是不精确的
你可以查查10进制小数转2进制的方法就知道了

一句话,最后一位不是0或者5的小数,用2进制来标识,长度是无限长的
songbing774933 2016-05-27
  • 打赏
  • 举报
回复
浮点数是不精确的

你可以用decimal,这个的精度比double更高
john_QQ:2335298917 2016-05-27
  • 打赏
  • 举报
回复
这个的确,因为二进制有时候不能精确的表示十进制的浮点数,所以会出现很小的偏差,但是你输出的时候可能汇给你略掉,或者你可以按照自己的意愿输出

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧