A1:  decimal转成float或double数值会产生误差
      float或double装成decimal时数值不会产生误差原因:decimal与另外两种类型的存储方法不同

解决方案 »

  1.   

    类型             大致范围                 精度           .NET Framework 类型  
    double  ±5.0×10−324到±1.7×10308   15到16 位           System.Double 类型             大致范围                 精度           .NET Framework 类型  
    float   ±1.5×10-45to±3.4×1038       7 位             System.Single 类型             大致范围                 精度           .NET Framework 类型  
    decimal ±1.0×10e−28至±7.9× 10e28   28到29          System.Decimal 
     
      

  2.   

    一个128位的,一个才32位。精度和数据表达范围,差远了。   你先转成double看看.......实在不行就迂回曲折一下。
      

  3.   

    精度指的是整数位+小数位的个数,当整数位不为0时
    例如 5.666666666666666666666666666666 精度是31保存到double中时由于超出了double本身的精度范围所以会舍位,
    得到5.66666666666667 精度15 有效数字14(最后的7是4四舍五入的)保存到float中
    得到5.666667 精度7 有效数字6 (最后的7是4四舍五入的)保存到decimal中
    得到5.666666666666666666666666667 精度 28 有效数字27 (最后的7是4四舍五入的)当整数位为0时
    例如 0.5666666666666666666666666666666 精度是32保存到double中时由于超出了double本身的精度范围所以会舍位,
    得到0.566666666666667 精度16 有效数字15(最后的7是4四舍五入的)保存到float中
    得到0.5666667 精度7 有效数字6 (最后的7是4四舍五入的)保存到decimal中
    得到0.5666666666666666666666666667 精度 29有效数字28(最后的7是4四舍五入的)
      

  4.   


    请看5楼我的回复,
    存储在decimal中的数值精度越高在转化成float或double时,产生的误差就越大