返回目录:范文示例
今天小编给各位分享四舍五入函数的知识,文中也会对其通过2.5、3.675若采用round四舍五入,结果全错了吧?和Round 的百位的四舍五入的问题等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!
内容导航:
一、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中四舍五入后结果不一样》等文章的解答希望已经帮助到您了!如您想了解更多关于四舍五入函数的相关信息,请到本站进行查找!