zoukankan      html  css  js  c++  java
  • 关于 ROUND 函数

    今天做项目的时候遇到个问题,项目需要数字四舍五入。我立即想到Math.Round这个函数,在我的印象中它就是个四舍五入的函数,想都没想就套用上去了。 


    结果我在测试的时候发现实际上并不是这样的。我测试的数据为0.4,0.6,0.5和1.5。发现其结果和预想的结果大不相同。0.4和0.6这个不用说没问题分别返回了0和1,没错。奇怪的是0.5这个值居然返回的是0,我一琢磨难道Math.Round函数是五舍六入不成??于是看了下1.5的返回值,按我上一步的推断应该返回1,结果恰恰返回了2! 

    这回蒙了~ 马上打开网页,在MSDN上需求答案,果不其然!Math.Round这个函数的解释是将双精度浮点值按指定的小数位数舍入,并不就是四舍五入。这种舍入有时称为就近舍入或四舍六入五成双。(直接调果然不行~),那怎么办呢?继续往下看,如果 a 的小数部分正好处于两个整数中间,其中一个整数为偶数,另一个整数为奇数,则返回偶数。 这句话什么意思呢? 
    我是看了半天也没看明白,小数部分正好处于2个整数之间??难道小数部分后面还有数?那是什么数阿,反正我是没理解,没办法只能自己敲代码实验: 

    Math.Round(0.4) //result:0 
    Math.Round(0.6) //result:1 
    Math.Round(0.5) //result:0 
    Math.Round(1.5) //result:2 
    Math.Round(2.5) //result:2 
    Math.Round(3.5) //result:4 
    Math.Round(5.5) //result:6 
    Math.Round(6.5) //result:6 
    Math.Round(8.5) //result:8 
    Math.Round(9.5) //result:10 
    大家看出来了没,我就从就近舍入或四舍六入五成双这句话来理解,就近舍入?没说清楚,四舍五入!嗯,没错0.4和0.6结果都符合要求,那么五成双什么意思呢?我也不太明白,那就看上面的数据!发现没,离小数位最近整数值,或者说当舍入位前面一位的值,如果是偶数的话,它就进1,如果是奇数的话,就舍!~原来是这样。 

    MSDN的解释我是怎么看怎么也不明白了(诺有高人请赐教~)。那我们如何去实现四舍五入这个功能呢? 

    2话不说,继续翻阅MSDN,果然有可以实现的方法,请调用 Math.Round(Decimal, MidpointRounding) 重载!~哦,原来还有重载的方法可用,MidpointRounding在两个数字之间时如何舍入的规范,这是MSDN对其MidpointRounding所做的解释,在两个数字之间时这句我的理解是如果小数位最大值的一半的值,就像0.5这个5这个小数是所谓的中间值吧~反正是个规范,我们利用实现就可以了。规范MidpointRounding中它有2个成员,一个是ToEven还有个是AwayFromZero。 

    //四舍五入 
    Math.Round(0.5,MidpointRounding.AwayFromZero) 

    【转 自 http://www.zzzj.com/html/20081203/68596.html 】

    下面来介绍将小数值舍入为整数的几个方法:Math.ceil()、Math.floor()和Maht.round()。这三种方法分别遵循下列舍入规则:

    1. Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数。
    2. Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数。
    3. Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数。

    下面是使用这些方法的示例:

    alert(Math.ceil(25.9));  //26
    alert(Math.ceil(25.5));  //26
    alert(Math.ceil(25.1));  //26
    
    alert(Math.round(25.9));//26
    alert(Math.round(25.5));//26
    alert(Math.round(25.1));//25
    
    alert(Math.floor(25.9));//25
    alert(Math.floor(25.9));//25
    alert(Math.floor(25.1));//25

    对于所有介于25和26(不包括26)之间的数值,Math.ceil()始终返回26,因为它执行的是向上舍入。Math.round()方法只在数值上大于等于25.5时返回26;否则返回25。最后,Math.floor()对所有介于25和26(不包括26)之间的数值都返回25。

    SQL 的round () 方法

    特殊用法 ,整数位取整

    round(14163,-1)  为 14160

      round(14163 + 4.99 ,-1) 为 14170 

  • 相关阅读:
    elasticsearch 数据迁移
    elasticsearch使用简介 -安装篇
    docker 使用笔记
    PHP 全局变量
    做人做事需牢记20条原则
    MYSQL 存储引擎概述
    postgresql常用命令
    ORACLE 清理SYSAUX表空间
    sqlserver数据库的启动
    postgressql启动与关闭
  • 原文地址:https://www.cnblogs.com/withoutaword/p/2915287.html
Copyright © 2011-2022 走看看