加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

浅谈四舍五入

发布时间:2020-12-12 14:45:38 所属栏目:MsSql教程 来源:网络整理
导读:问题 ?? 最近在工作最到了一个关于四舍五入的问题是关于四舍五入不一致的问题,通过google详细的查询了一番 ?? 1.125 保留两位小数问题 ?? 测试环境 ?? office excel 2007 ?? 1.125保留两位小数后是1.13 ?? vs2010 C#代码中 ?? double d1 = Math.Round(1.125

问题

?? 最近在工作最到了一个关于四舍五入的问题是关于四舍五入不一致的问题,通过google详细的查询了一番
 
?? 1.125 保留两位小数问题
?? 测试环境
?? office excel 2007 
?? 1.125保留两位小数后是1.13
?? vs2010 C#代码中
?? double d1 = Math.Round(1.125,2)? // 1.12
?? 结果不一样!

分析

?

????? Excel中的保留小数方式是我们传统的四舍五入的方式,但C#是的Math.Round默认采用的其实并不是我们传统上的四舍五入的方式

????? 而是四舍六入五成双的方式,可以查看以下链接 http://baike.baidu.com/view/1245064.htm

?

????? 下面分析一下在C#和sqlserver 中的Round的行为方式:

????? 1.? C#?? 中的Round有带第三个参数的重载方式

??????????? MidpointRounding --这是一个枚举类型有两个 ToEven 和AwayFromZero? 其中ToEven就是默认的行为

?????????????????????????????????????????? ToEven??????????????? 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。 ????????????????????????????????????????????AwayFromZero? 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值

??????????? 上个这个解释是MSDN上的,但我觉得第AwayFromZero的中文解决比较难理解,应该按照英文字面的意思理解起来比较容易

???????????? 即 结果是离0最远的数,? 例如: 1.125? 得1.13 而不是1.12??? 1.13比1.12离0更远一些, 负数也是如些

??????????? 使用AwayFromZero? 则行为为excel一致了

????? 2.?sqlserver中的Round ,也有第三个参数

????????? ROUND ( numeric_expression,length [,function ] )

???????? 但是它的第三个参数和四舍六入五成双没有关系,如果第三个为0则是四舍五入,否则直接是去尾法了。

???????? 也是就是说sqlserver中的round并不支持四舍六入五成双这种方式,如果想实现还得自己去实现一个函数

结论

????? 1.Sqlserver中的Round默认的行为与excel中是一样的,都是采用的传统我们印象里的四舍五入的方式

????? 2.C#中的Round默认的方式是我们上面说的四舍六入五成双的方式,所以在做统计数据编程的时候可以要小心,程序生成的值可能和客户自己通过excel算出来的不一样

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读