• 关于float数据类型的雷


    在用到float类型时,遇到了之前没有关注的【三个雷】。

    【雷一】:

        在用sqlserver调用其它sqlserver数据库时,对方给我的数据类型是float,但接口文档中说是 Numeric(30,10)类型,于是我就用Numeric(30,10)去接收,导致接收数据错误:    如:原数据是 45.78,接收过来就变成了 45.7799999999。

       最后改成float接收,问题解决

    【雷二】:

        在C# 读取sqlserver中float数据时,C# 也使用 float 接收,结果读取出来的数据就不对了,后来上网查寻后,发现 sqlserver的float类型,对应C#的是double类型。

       然后C# 换成double类型,暂时解决了这个问题,为啥叫暂时解决了?因为后面有 踩到了一个很容易忽略的雷。

    【雷三】:

        在第二步的基础上,使用double类型,接收了float数据后,需要进行四舍五入的计算,结果郁闷了。double的四舍五入是西方的概念,不是中国的四舍五入概念。怎么理解呢?也就是说 double的 四舍五入,实际逻辑是 “四舍六入,五平均”,四舍六入好理解,何为“五平均”呢?举个例子你就明白了

         原数double类型:45.465      Math.Round(45.465,2)     结果就是 45.47

                                      45.475      Math.Round(45.475,2)     结果仍是 45.47 

        这就叫 “五平均”,看前面的那个数是偶数还是奇数,然后偶数进一,奇数不进一。

         【注意】还有一个注意点: Math.Round(45.475,2,MidpointRounding.AwayFromZero);  MidpointRounding.AwayFromZero对正数有用,对负数无效。

        

        最后使用Decimal解决了这个问题, 但Decimal不存在这个问题,于是使用了Decimal类型接收了数据库的float类型,解决了第二个雷遗留的问题。

         

  • 相关阅读:
    js深入研究之自定义混合Mixin函数
    js深入研究之克隆,属性,数组,对象,函数
    PHP交易详情有感
    PHP统计排行,分页
    php获取当前月月初至月末的时间戳,上个月月初至月末的时间戳
    php编程规范
    js深入研究之无法理解的js类代码,extend扩展
    js深入研究之神奇的匿名函数类生成方式
    【编程之美】双线程高效下载
    转: 连续数打乱判断出少了哪些数?
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/12713631.html
Copyright © 2020-2023  润新知