158文章网欢迎您
您的位置:158文章网 > 范文示例 > 2.5、3.675若采用round四舍五入,结果全错了吧?

2.5、3.675若采用round四舍五入,结果全错了吧?

作者:158文章网日期:

返回目录:范文示例

今天小编给各位分享四舍五入函数的知识,文中也会对其通过2.5、3.675若采用round四舍五入,结果全错了吧?和Round 的百位的四舍五入的问题等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:
  • 2.5、3.675若采用round四舍五入,结果全错了吧?
  • Round 的百位的四舍五入的问题
  • R软件里面的round函数问题?round(1.5)和round(2.5)都会得到2的结果。不是四舍五入吗?怎么会这样?
  • excel中四舍五入后结果不一样
  • 一、2.5、3.675若采用round四舍五入,结果全错了吧?

    计算

    一、一般情况。round(number[, ndigits])函数返回number舍入到小数点后ndigits位精度的值,比如:

    round(3.14, 1)
    3.1

    如果ndigits被省略或为None,则返回最接近number的整数,除此之外,返回值与number的类型一致。

    round(3.14, None)
    3
    round(3.14, 0) # 不是被省略,也不是None
    3.0

    看看ndigits为负数的情况,同样,结果会被舍入到最接近10的负ndigits次幂的倍数。(负负得正,会对整数位进行舍入)

    round(314, -1)
    310

    二、特殊情况。若number离前后的有效数距离相等时,比如0.5,若保留整数部分,很显然,其离0和离1的距离一样,这个时候round会如何取舍呢?先看看下面实际的运行结果情况:

    round(0.5) # 离0和1的距离相等
    0
    round(-0.5) # 离0和-1的距离相等
    0
    round(1.5) # 离1和2的距离相等
    2
    round(2.5) # 离2和3的距离相等
    2

    round的规则是这样的(python3版本):选择偶数!上面的结果也印证了这一规则。

    三、失真情况。一些十进制小数在计算机中无法用二进制精确表示,存在失真,比如3.675,在计算机中的二进制数接近如下情况:

    print(f'{3.675:.20f}')
    3.67499999999999982236

    所以,如果我们采用round函数保留2位小数的话,很显然,计算机认为更接近3.67,验证一下:

    round(3.675, 2) # 虽然看起来与3.67、3.68的距离相同
    3.67

    简单解释一下因为进制转换导致的失真,比如,三分之一,在我们十进制世界里就无法用小数精准表示,即使写成0.33333333,后面加再多的3,依然存在误差。但是在三进制世界里,却可以精准地表示为0.1。

    总结:

    round函数与我们现实中的四舍五入规则不一样;round函数一直在尽量接近公平,在保留有效位时,会选择离其最近的数;但由于存在进制转换的失真,导致计算远近的时候,可能与我们在十进制世界看到的情况不一样;若离两边数的距离完全相等时,round函数选择偶数;由于round函数的规则比较偏技术,所以一般用在对有效位误差要求不太高的地方,对于有严格精度和规则要求的地方,建议使用decimal模块。

    小补充,针对编程小白人员:

    round(3.004, 2)
    3.0

    我要的是保留2位小数,为啥输出的只有一位小数呢?round是不是搞错了?!这里确实冤枉round函数了,round函数按照前面讲的规则计算出结果后,对尾部的非有效位确实清0了,然后函数以浮点数或整数返回,对于返回的结果若用于运算,不会有任何问题,但我们上面看到的“3.0”是格式化打印显示,属于数值的格式化输出范畴,跟round没有关系。更深入一步,round函数也仅对尾部的非有效位清0,而不是真正的截断,一方面,对于数值运算不影响,另一方面,计算机中数值运算的有效位是固定的,就是咱们经常提到的32位或64位(二进制位)。

    一、Round 的百位的四舍五入的问题

    VB6中文版说这个函数是四舍五入函数,实际上这个函数采用的四舍六入五留双。VB的Round所采用的算法是这样的:
    1.25留一位,则1.2=round(1.25)
    如果是1.35,则1.4=round(1.35)
    奇进偶不进。这样在一大串需要四舍五入的数相加相减相乘时误差小一点。eg:1.25+1.35+1.45+1.55+1.15+1.65=8.4=round(1.25)+round(1.35)+round(……
    ROUND函数符合国家和国际标准,该函数是正确的。原先的四舍五入只是一个简化。

    你可以试下这个函数
    Function RoundEx(Number, Optional nLen As Long = 0)
    On Error GoTo ErrRound
    Dim dblAdd As Double

    dblAdd = 10 ^ (-nLen - 1)
    If Number < 0 Then dblAdd = -dblAdd
    Number = Number + dblAdd
    RoundEx = Round(Number, nLen)

    Exit Function
    ErrRound:
    MsgBox "实时错误:" & Err.Number & vbCrLf & vbCrLf & Err.Description, vbExclamation, "错误提示"
    End Function

    二、R软件里面的round函数问题?round(1.5)和round(2.5)都会得到2的结果。不是四舍五入吗?怎么会这样?

    因为round默认的是0.5向偶数舍入。

    三、excel中四舍五入后结果不一样

    三项的百分比分别是:0.654723、0.29316、0.052117,都没有达到四舍五入的要求。

    可考虑的是将0.654723中的7进位到前一位,这样前一位就是5,可以再进位到前一位,变成6。这样,第一个百分比就变成0.66,就不会有问题了。

    可使用下面的公式实现:

    =ROUND(值/和值,3),再将单元格格式设置成“百分比”,并将小数位数设置成0

    关于四舍五入函数的问题,通过《R软件里面的round函数问题?round(1.5)和round(2.5)都会得到2的结果。不是四舍五入吗?怎么会这样?》、《excel中四舍五入后结果不一样》等文章的解答希望已经帮助到您了!如您想了解更多关于四舍五入函数的相关信息,请到本站进行查找!

    本文标签:四舍五入函数(1)

    相关阅读

    关键词不能为空

    范文示例_作文写作_作文欣赏_故事分享_158文章网