zoukankan      html  css  js  c++  java
  • 【数据小常识】“四舍六入五成双”

    “四舍六入五成双”规则如下:

    “四舍六入五成双”,也即“4舍6入5凑偶”,这里“四”是指≤4 时舍去,"六"是指≥6时进上。

    "五"指的是根据5后面的数字来定,当5后有数时,舍5入1;5后无有效数字时,需要分两种情况来讲:5前为奇数,舍5入1;5前为偶数,舍5不进(0是偶数)。

    一、具体计算规则:

    1)被修约的数字小于5时,该数字舍去;

    2)被修约的数字大于5时,则进位;

    3)被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。

    二、来由:

    这一方式的另一个常见名称为“银行家舍入”,是IEEE754标准的推荐舍入标准。这一方式跟通常的四舍五入相比,平均数方面更能保持原有数据的特性。

    三、举例:

     

    9.8249=9.82, 9.82671=9.83

    9.8350=9.84, 9.8351 =9.84

    9.8250=9.82, 9.82501=9.83

     

     

    jsNumber.toFixed()实际的精度确认规则是四舍六入五成双,逢四下舍,逢六入一,逢五时,根据浏览器内核计算结果也不尽相同。

    from pyecharts_javascripthon.dom import Number      # for Number module

     

    Number(9.249).toFixed(2)

    "9.25"

    Number(9.82671).toFixed(2)

    "9.83"

    Number(9.8350).toFixed(2)

    "9.84"

    Number(9.8351).toFixed(2)

    "9.84"

    Number(9.8250).toFixed(2)

    "9.82"

    Number(9.82501).toFixed(2)

    "9.83"

    jsMath.round()实际的精度确认规则是四舍六入五成双,逢四下舍,逢六入一,逢五时,根据浏览器内核计算结果也不尽相同。

    from pyecharts_javascripthon.dom import Math      # for Math module

     

    Number(point*100).toFixed(2)+"%"

    "0.42%"

    Math.round(0.00999 * 10000) / 100 + "%"

    "1%"

    Number(0.00988*100).toFixed(2)+"%"

    "0.99%"

    Math.round(0.00984 * 10000) / 100 + "%"

    "0.98%"

    Number(0.00984*100).toFixed(2)+"%"

    "0.98%"

     

    (window.parseFloat(0.02451)*100).toFixed(2) +"%"

    "2.45%"

     

     

    解决方案:

    方法一: 通过 toFixed(num)方法来保留小数。因为这个方法是根据四舍五入来保留小数的,所以最后的计算结果不精确。

    (1.0-0.9).toFixed(digits)  // toFixed() 精度参数须在 0 与20 之间(digits是精确的小数点后的位数) 

    parseFloat((1.0-0.9).toFixed(10)) === 0.1 // 结果为True 

    parseFloat((1.0-0.8).toFixed(10)) === 0.2 // 结果为True 

    parseFloat((1.0-0.7).toFixed(10)) === 0.3 // 结果为True 

    parseFloat((11.0-11.8).toFixed(10)) === -0.8 // 结果为True 

    parseFloat((2.22 + 0.1).toFixed(10)) ===2.23 //结果为True 

    方法二:把要计算的数字升级(乘以10n次幂)成计算机能够精确识别的整数,计算完以后再降级。具体的我没有实现过。

    方法三: Math.floor( xxx * 10 ) / 10 // 精确到小数点后一位

    1.11*10 

    11.100000000000001 //精度不准确 

    Math.floor(1.11*10)/10 // 精确到小数点后一位 

    1.1 

  • 相关阅读:
    asp.net点击按钮下载图片而不是打开图片
    在事务中调用WebService一定程度上实现数据同步
    C#自定义Attribute的定义和获取简例
    开发ASP.NET下的MP3小偷程序
    Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)
    MasterPage 类
    怎样成为优秀的软件测试员
    标准日本语动词大全
    什么是WSDL?
    ASP.NET程序中常用的三十三种代码
  • 原文地址:https://www.cnblogs.com/hightech/p/13188133.html
Copyright © 2011-2022 走看看