日期:2014-05-20  浏览次数:21055 次

用double做乘法答案不正确
刚才发现的这个问题,谁能帮忙指点一下原因?
double   x   =   178900867.300;           \\   double   178900867.3
double   y   =   Math.Pow(10,   -6);     \\   double   0.000001
double   z;                  
z   =   x   *   y;                                         \\   double   178.90086730000002

谁能告诉我后面这个0000002是怎么来的?

in   vs   2005,   .net   2.0



------解决方案--------------------
浮点数据本身就是不精确的
------解决方案--------------------
浮点型在内存中是以2进制的形式近似来表示的,超出精度的部分在内存中是什么就不得而知了
用decimal类型就不会出现问题了
------解决方案--------------------
补充一点double类型的精度是17位有效数字
float类型的精度是7位有效数字
你可以数一下,你的z已经超出了17位了,那个2就是第18位。
------解决方案--------------------
正常,舍入误差