精华内容
下载资源
问答
  • 在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢? 一.小数点后取2位(四舍五入)的方法 方法一:round()函数 方法二:’%.2f...

    在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢?





    一.小数点后取2位(四舍五入)的方法

    方法一:round()函数

    1.首先不推荐使用这个函数、python2和python3对应的效果还不太一样,使用的时候慎重!
    2.也感谢评论区网友的提示,有人说具体用法是**四舍六入五成双**。但是发现也不太对,还是有坑的,各位看官请看?
    3.欢迎各位来补充?

    四舍六入五成双四舍六入五凑偶的意思, 根据百度词条的解释如下:

    • (1)当精确位后面一位的数字是1-4的时候,舍去
    • (2)当精确位后面一位的数字是6-9的时候,进1位
    • (3)当精确位后面一位的数字是5的,此时需要看这个5后面是否还有值。如果5后面有值(0忽略),则直接进位;
    • (4)如果5后面没值或值为0,则需要判断5前面的值是偶数还是奇数。
    • (5)如果5前面是偶数,不进位;如果是奇数,进位。
    • 为了方便大家的理解,各种情况都测试一下。默认都是按照:小数点后2位有效数字取值
    • 小数点第二位就是精确位,小数点后第三位就是我们重点关注的位数
    # (1)、(2)规则
    
    a = 1.45321
    b = 2.45678
    print(round(a, 2))
    print(round(b, 2))
    
    
    # 打印内容
    1.45
    2.46
    
    


    # (3)规则
    
    a = 1.12500002
    b = 2.15500002
    c = 2.15500000
    print(round(a, 2))
    print(round(b, 2))
    print(round(c, 2))
    
    
    # 打印内容
    1.13
    2.16
    2.15
    
    

    小数点后第三位是我们重点关注的,而第三位后面还有值,那直接进位。上面案例中2.155后面的几个0,都忽略。



    # (4)、(5)规则
    
    print(round(1.205, 2))
    print(round(1.215, 2))
    print(round(1.225, 2))
    print(round(1.235, 2))
    print(round(1.245, 2))
    print(round(1.255, 2))
    print(round(1.265, 2))
    print(round(1.275, 2))
    print(round(1.285, 2))
    print(round(1.295, 2))
    
    
    # 打印内容
    1.21	# 1.205---进位
    1.22	# 1.215---进位
    1.23	# 1.225---进位
    1.24	# 1.235---进位
    1.25	# 1.245---进位
    1.25	# 1.255---未进位
    1.26	# 1.265---未进位
    1.27	# 1.275---未进位
    1.28	# 1.285---未进位
    1.29	# 1.295---未进位
    

    通过以上打印结果发现, (4)、(5)规则根本就不适用上述情况。总结规律如下:
    如果精确位后面的一位是5,且5后面没其他数值,此时精确位如果是0—4,则进位(5种情况)。如果是5–9则不进位(5种情况)。
    我的理解是,不同语言、不同函数的处理都是细微的差别。但总归把进位和不进位的概率,都是平均分布的。

    最终的规律总结如下:

    • (1)当精确位后面一位的数字是1-4的时候,舍去
    • (2)当精确位后面一位的数字是6-9的时候,进1位
    • (3)当精确位后面一位的数字是5的,此时需要看这个5后面是否还有值。如果5后面有值(0忽略),则直接进位;
    • (4)如果5后面没值或值为0,则需要判断精确位的区间,如果是0—4,则进位。如果是5–9,则不进位。

    各位看官,不知道我解释的够清楚了吗?如果感觉还行,帮忙点个赞吧!!!




    方法二:’%.2f’ %f 方法

    f = 1.23456
    
    print('%.4f' % f)
    print('%.3f' % f)
    print('%.2f' % f)
    

    结果:

    1.2346
    1.235
    1.23
    
    • (1)原本以为:这个方法是最常规的方法,方便实用,居家旅行必备!
    • (2)但是…
    f = 0.625
    print('%.2f' % f)
    
    # 结果:0.62
    

    具体是否进位,有个概率问题,感兴趣的朋友可以看看评论里面的信息。
    感谢weixin_43094430这位朋友的提示,也感谢其他朋友的参与



    方法三:Decimal()函数

    from decimal import Decimal
    
    aa = Decimal('5.026').quantize(Decimal('0.00'))
    bb = Decimal('3.555').quantize(Decimal('0.00'))
    cc = Decimal('3.545').quantize(Decimal('0.00'))
    
    print(aa)
    print(bb)
    print(cc)
    

    结果:

    5.03
    3.56
    3.54
    

    decimal这个模块在很少用,如上图中,3.555结果为3.56,而3.545结果变为3.54,一个5进位了,一个是5没进位,具体原因不详。
    所以不推荐使用这个方法!!!





    二.小数点后取2位(四舍五不入)的方法

    通过计算的途径,很难将最终结果截取2位,我们直接想到的就是如果是字符串,直接截取就可以了。
    例如

    num = '1234567'		#字符串num
    print(num[:3])
    
    结果:
    123
    

    如果是123.456取2位小数(截取2位小数),值需要把小数点右边的当做字符串截取即可
    partition()函数(将字符串根据字符串切割):
    http://www.runoob.com/python/att-string-partition.html

    num = '123.4567'
    num_str = num.partition(".")
    print(num_str)
    
    结果:
    ('123', '.', '4567')   # 三个元素的元祖
    

    拼接字符串:format()函数的使用
    https://blog.csdn.net/i_chaoren/article/details/77922939




    方法一:

    def get_two_float(f_str, n):
        a, b, c = f_str.partition('.')
        c = c[:n]
        return ".".join([a, c])
    
    
    num = "123.4567"		#(1)隐患一,传入函数的是字符串
    print(get_two_float(num, 2))
    
    num2 = '123.4'			# (2)隐患二,如果传入的字符串小数位小于最终取的位数
    print(get_two_float(num2, 2))
    

    结果:

    123.45
    123.4
    


    最终版本:
    def get_two_float(f_str, n):
        f_str = str(f_str)      # f_str = '{}'.format(f_str) 也可以转换为字符串
        a, b, c = f_str.partition('.')
        c = (c+"0"*n)[:n]       # 如论传入的函数有几位小数,在字符串后面都添加n为小数0
        return ".".join([a, c])
    
    
    num = 123.4567
    print(get_two_float(num, 2))
    
    num2 = 123.4
    print(get_two_float(num2, 2))
    

    结果:

    123.45
    123.40
    
    展开全文
  • c#将带有小数点的数值四舍五入为整数,用一个函数
  • 最简单的 四舍五入到个位: Iris= Int(Lily + 0.5) 推广到 四舍五入到10^P位: Iris = Int(Lily * 10 ^ (-P) + 0.5) * 10 ^ P …但是为什么不用Round(expression [,numdecimalplaces]) 呢 再推广到 n-1舍n入到10^P...

    装作自己厉害到能写博客了…
    真的只是个水贴…做的比我好的不是大有人在了 而是不计其数了
    最简单的 四舍五入到个位: Iris= Int(Lily + 0.5)
    推广到 四舍五入到10^P位: Iris = Int(Lily * 10 ^ (-P) + 0.5) * 10 ^ P
    …但是为什么不用Round(expression [,numdecimalplaces]) 呢

    再推广到 n-1舍n入到10^P位 ,写成你们拿去就能用的函数好了:

    Public Function Miaow(ByVal Lily As Double, Optional ByVal P As Integer = 0, Optional ByVal n As Byte = 5) As Double 
        If n < 1 Or n > 9 Then
          MsgBox "数学不好的Iris并不能算出来呢"
          Exit Function
        End If
        Miaow = Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P ‘★
      End Function
    

    有★的那句才是重点…
    以及 n-1舍n+1入n留I到10^P位 ,I = 0 时就是上式 ,I = 1 时留单 ,I = 2 时留双:

    
      Public Function Meow(ByVal Lily As Double, Optional ByVal P As Integer = 0, Optional ByVal n As Byte = 5, Optional ByVal I As Byte = 0) As Double
        If n < 1 Or n > 9 Or I > 2 Then
          MsgBox "数学不好的Iris并不能算出来呢"
          Exit Function
        ElseIf (I > 0) And (Right(Trim(Str(Int(Lily * 10 ^ (-P - 1)))), 1) = Trim(Str(n))) Then
          Meow = IIf(Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P Mod 2 = 2 - I, Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P, Int(Lily * 10 ^ (-P)) * 10 ^ P)
        Else: Meow = Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P
        End If
      End Function
    

    上面if 的条件里那一团不可名状的东西是判断尾数是不是n的
    以及 觉得自己不可能填错参数就把最前面的检验去掉…

    这写的是什么啊…我自己都不想看 更不想优化 反正大概这个意思
    俺寻思这能行.jpg
    Meow这个函数我都没有验证能不能用…
    反正前面的能用 试过了
    嗯…那么结束的时候该说些什么呢…

    展开全文
  • 数值四舍五入后格式化. @param num 数值(Number或者String) @param cent 要保留的小数位(Number) @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型); @return 格式的字符串,如'1,234,567.45' @...
    /* 
        将数值四舍五入后格式化. 
        @param num 数值(Number或者String) 
        @param cent 要保留的小数位(Number) 
        @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型); 
        @return 格式的字符串,如'1,234,567.45' 
        @type String 
        */ 
        function formatNumber(num,cent,isThousand){
            num = num.toString().replace(/\$|\,/g,''); 
            if(isNaN(num))//检查传入数值为数值类型. 
            num = "0"; 
            if(isNaN(cent))//确保传入小数位为数值型数值. 
            cent = 0; 
            cent = parseInt(cent); 
            cent = Math.abs(cent);//求出小数位数,确保为正整数. 
            if(isNaN(isThousand))//确保传入是否需要千分位为数值类型. 
            isThousand = 0; 
            isThousand = parseInt(isThousand); 
            if(isThousand < 0) 
            isThousand = 0; 
            if(isThousand >=1) //确保传入的数值只为0或1 
            isThousand = 1; 
            sign = (num == (num = Math.abs(num)));//获取符号(正/负数) 
            //Math.floor:返回小于等于其数值参数的最大整数 
            num = Math.floor(num*Math.pow(10,cent)+0.50000000001);//把指定的小数位先转换成整数.多余的小数位四舍五入. 
            cents = num%Math.pow(10,cent); //求出小数位数值. 
            num = Math.floor(num/Math.pow(10,cent)).toString();//求出整数位数值. 
            cents = cents.toString();//把小数位转换成字符串,以便求小数位长度. 
            while(cents.length<cent){//补足小数位到指定的位数. 
                cents = "0" + cents;
            } 
            if(isThousand == 0) //不需要千分位符. 
            return (((sign)?'':'-') + num + '.' + cents); 
            //对整数部分进行千分位格式化. 
            for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
            num = num.substring(0,num.length-(4*i+3))+','+ 
            num.substring(num.length-(4*i+3));
            if(cents != 0){
                return (((sign)?'':'-') + num + '.' + cents); 
            } else {
                return (((sign)?'':'-') + num + '.00');
            }
        }
    展开全文
  • Oracle 数值四舍五入

    万次阅读 2015-02-23 20:35:59
    Oracle 提供了以下四个函数用来做四舍五入。 SELECT 5.5 NUM, CEIL(5.5) CEIL, FLOOR(5.5) FLOOR, ROUND(5.5) ROUND, TRUNC(5.5, 0) TRUNC FROM DUAL UNION ALL SELECT 2.5 NUM, CEIL(2.5) CEIL, FLOOR(2.5) FLOOR, ...

    -- Start

    Oracle 提供了以下四个函数用来做四舍五入。

    CEIL    向上四舍五入
    FLOOR   向下四舍五入
    ROUND   四舍五入
    TRUNC   去掉小数

    下面让我们通过例子来看看它们之间的不同。

    SELECT 5.5 NUM, CEIL(5.5) CEIL, FLOOR(5.5) FLOOR, ROUND(5.5) ROUND, TRUNC(5.5, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT 2.5 NUM, CEIL(2.5) CEIL, FLOOR(2.5) FLOOR, ROUND(2.5) ROUND, TRUNC(2.5, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT 1.6 NUM, CEIL(1.6) CEIL, FLOOR(1.6) FLOOR, ROUND(1.6) ROUND, TRUNC(1.6, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT 1.1 NUM, CEIL(1.1) CEIL, FLOOR(1.1) FLOOR, ROUND(1.1) ROUND, TRUNC(1.1, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT 1 NUM, CEIL(1) CEIL, FLOOR(1) FLOOR, ROUND(1) ROUND, TRUNC(1, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT -1 NUM, CEIL(-1) CEIL, FLOOR(-1) FLOOR, ROUND(-1) ROUND, TRUNC(-1, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT -1.1 NUM, CEIL(-1.1) CEIL, FLOOR(-1.1) FLOOR, ROUND(-1.1) ROUND, TRUNC(-1.1, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT -1.6 NUM, CEIL(-1.6) CEIL, FLOOR(-1.6) FLOOR, ROUND(-1.6) ROUND, TRUNC(-1.6, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT -2.5 NUM, CEIL(-2.5) CEIL, FLOOR(-2.5) FLOOR, ROUND(-2.5) ROUND, TRUNC(-2.5, 0) TRUNC FROM DUAL
    UNION ALL
    SELECT -5.5 NUM, CEIL(-5.5) CEIL, FLOOR(-5.5) FLOOR, ROUND(-5.5) ROUND, TRUNC(-5.5, 0) TRUNC FROM DUAL;
    

    结果如下:

    NUM    CEIL    FLOOR     ROUND     TRUNC
    5.5    6       5         6         5
    2.5    3       2         3         2
    1.6    2       1         2         1
    1.1    2       1         1         1
    1      1       1         1         1
    -1    -1      -1        -1        -1
    -1.1  -1      -2        -1        -1
    -1.6  -1      -2        -2        -1
    -2.5  -2      -3        -3        -2
    -5.5  -5      -6        -6        -5

    --更多参见:Oracle SQL 精萃

    -- 声明:转载请注明出处

    -- Last edited on 2015-07-27

    -- Created by ShangBo on 2015-02-23

    -- End


    展开全文
  • 1.round() 函数是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位。 2.numeric 函数的2个参数,第一个表示数据长度,第二个参数表示小数点后位数。 例如: ...
  • JAVA数值四舍五入

    千次阅读 2007-06-12 23:39:00
    Math.round求本身的四舍五入。 Math.floor求最大的整数但不大于本身. 问题我要进行四舍五入或取近似值.解决办法用 Math.round( ) 进行四舍五入, Math.floor( ) 和 Math.ceil( ) 进行上下近似值。NumberUtilities....
  • SQL数值四舍五入小数点后保留2位 1.round() 函数是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位。 2.numeric 函数的2个参数,第一个表示数据长度,第二个参数...
  • 在最近测试中,突然注意到默认使用DecimalFormat进行格式化时,并非我们一般认识上的四舍五入,而是一种诡异的舍入——(1)5以下舍去(2)5以上舍入(3)若前一位是奇数,5就舍入(4)如前一位是偶数,5就舍去 遇到这样的...
  • 我们在用excel办公软件制作报表的时候,可能需要表格中的数据按照指定的要求进行四舍五入,保留指定的小数位数。excel四舍五入怎么设置呢?当然,如果需要处理的数据不多,你可以人工进行四舍五入计算,如果需要...
  • //保留几位小数 function fmoney(obj, num) { return obj.value = ... 将数值四舍五入后格式化. @param num 数值(Number或者string) @param cent 要保留的小数位(Number) @param isThousand 是否需要千分
  • js中数值四舍五入

    2012-08-29 13:05:40
    js中数值四舍五入,保留n位小数 需要处理的数值为 number,保留的小数位数为 n位 方法如下:number.toFixed(n);
  • 1.toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。 NumberObject.toFixed(num) num必需写,规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将...
  • c#将数值四舍五入转换成整数

    千次阅读 2009-08-16 10:04:00
    来自:http://www.bbcweb.cn/news/1/412009726101041234.htm /// /// 将目标四舍五入成整数/// /// /// /// private double RoundEx(double InD, int GetInt){if (InD > 0){return System.Math.Round(InD, GetInt, ...
  •  //四舍五入处理过后的值  strValue=String.valueOf(endValue);  //处理后的值转换为字符串  pos=strValue.indexOf(".");//小数点的位置  len=strValue.length();//数值的总位数  dotLen=len-1-pos;...
  • 参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; round(2.3) 2 &amp;amp;gt;&amp;amp;gt;&...
  • 功能:四舍五入数值 @author:qilb/2013-12-26 @param v----需四舍五入的值 ,n---小数点位保留位数 **/ function toDecimal(v,n) { // 用正则表达式将前后空格 var val = v.replace(/[^\d\.-]/g, ""); var arr = val...
  • ORACLE四舍五入函数

    2015-10-04 12:30:38
    经常为四舍五入的方法烦恼,新的思路重写四舍五入,并可以根据小数位数自动格式化,适合于数值型表格显示,该思路可适用于任何系统或数据库,代码比较乱,欢迎指正。
  • * 将数值四舍五入后千分位格式化. * * @param num 数值(Number或者String) * @param cent 要保留的小数位(Number) * @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型); * @return 格式的字符串,如...
  • 问题: 在excel中设置了数值格式,不保留小数点。...在同样的格式中出现不统一的四舍五入。   原因分析: 1.本以为是oledb的原因,查找后不是 2.在手动输入数值是,不会造成这个问题,以为是excel版本问题
  • 小程序中数值的处理,四舍五入

    千次阅读 2018-03-07 17:57:00
    1.保留小数(toFixed) 四舍五入 保留小数点后几位小数. 方法很简单.toFixed()即可.括号内的数字表示保留的位数.如果是整数,就会不上0 特别注意:这方法返回的是String, 然后用parseInt()转换类型才拿到值.  2....
  • java 小数点 四舍五入 方法

    千次阅读 2017-09-13 18:15:13
    Math.ceil()执行向上舍入,...Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。下面来看几个例子: Math.ceil(25.9) //26 Math.ceil(25.5) //26 Math.cei
  • java四舍五入

    千次阅读 2019-01-23 14:34:01
    一.BigDecimal中包涵了四舍五入,上下取整,保留小位数等方法 BigDecimal下有个坑,当传入浮点类型新建BigDecimal时,生成的BigDecimal对象会产生小数位偏差,当进行四舍五入的时候,建议BigDecimal不要传入浮点数类型,...
  • 该函数返回传入的x数值(浮点型或整型)的四舍五入值; 参数n表示x进行四舍五入时保留/参考的数位精度; 参数n可以不传入,此时其默认值为0,但若传入的话,则必须为整型; 当n为0时,返回的结果为整型,n为负整数...
  • PHP数值的保留2位小数和四舍五入

    千次阅读 2016-02-20 14:14:33
    $price = 123; 1、return round($price,2); 2、return number_format($price, 2, '.', '');第一种方法是四舍五入并保留2位小数,...第二种方法是保留2位小数并四舍五入,虽然跟第一种方法看似一样,但使用第二种方法
  • SELECT ROUND( number, [ decimal_places ] ) FROM DUAL说明:number : 将要处理的数值decimal_places : 四舍五入,小数取几位,不填默认为0 Sample :select round(123.456) from dual; 结果: 123 select round
  • 今天小编就为大家分享一篇关于易语言四舍五入命令使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • java数字进行四舍五入

    千次阅读 2014-06-25 22:54:08
    1. 利用数学函数 /** * 利用数学函数四舍五入,最简便的方法 */ public static Float mathConvert(Float num){ return (float) Math.round(num * 100 )/ 100; }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,248
精华内容 26,499
热门标签
关键字:

对数值四舍五入