<代码>(价值、重大Digit)是普通解决办法,但是,在<代码>5上结束的圆面值时,这种办法不会从数学角度看待。 如果“5
在你重新四舍五入之后就在位数中,这些数值有时只是按预期(即8.005<<>>>>>。 数位数为2位数,<>代码>8.01
。 对于由于浮动点数点数而导致的某些数值,则四舍五入!
i.e.
>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01
Weird。
假设你的意图是进行传统的科学统计工作,这是获得<条码>(<>四>>/代码>功能的手表,按预期需要使用<条码>。 页: 1
>>> round(0.075,2)
0.07
>>> round(0.075+10**(-2*5),2)
0.08
Aha! 因此,根据这一点,我们能够发挥作用......
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1), digits)
基本上,这增加了一种保证价值,即小于你试图使用<条码>的座标/代码>的最小数字。 加上少量数据,它保存了<代码> 环形<>>> 代码/代码>在多数情况下的行为,而现在则确保数字低于被四舍五入到代码<5>代码>的数值,如果该数值为<代码>4<>>>。
采用<代码>10**(-len(val)-1)的做法是故意的,因为即使删除了“decimal,你所能增加的最小数字也确保了你永远不会改变该轮值。 我可以只使用10**(-len(val)
,附有一个简略的<代码>if(val>1)
,以替代1
,但更简单地说,总是将<1><>>>>>>>>>>>>>>>细分为“,因为“t”能够大大改变可适用的标准编号范围。 如果贵方的价值观达到这种界限,这种做法将失败,但对于它应当发挥的几乎所有有效价值来说,这种做法将失败。
您也可使用图书馆来完成这项工作,但我提议的内容更为简单,在某些情况下可能更可取。
<><>Edit>: Blckknght 指出<代码>5 fringe case is only for certain Value. 另外,这一答复的较早版本还明确无误地表明,单相干的行为只有在位数与您重新四舍五入的位数位数相差时才会发生。