最快的方式到最近的5/100th

the*_*ame 6 python

我有想要的数字:

1.215145156155 => 1.2
1.368161685161 => 1.35
1.578414616868 => 1.6
Run Code Online (Sandbox Code Playgroud)

(*注意:如果为零,则不应标记百分位.)

什么是最快的做到这一点呢?

这就是我现在所拥有的,而且速度不够快:

def rounder(v):
    v = str(round(float(v),2))
    if len(v) == 3: v = v + str(0)
    d0 = int(v[0])#ones
    d1 = int(v[2])#tenths
    d2 = int(v[3])#hundredths
    if d2 <= 4:
        return str(d0)+'.'+str(d1)
    elif 4 < d2 < 7:
        return str(d0)+'.'+str(d1)+str(5)
    elif d2 >= 7:
        if d1 != 9:
            return str(d0)+'.'+str(d1+1)
        if d1 == 9:
            return str(d0+1)+'.'+str(0)
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 11

缩放,圆形,不规模.

round(20*v)/20
Run Code Online (Sandbox Code Playgroud)

我应警告你,这种行为可能会让你大吃一惊:

>>> round(20*1.368161685161)/20
1.3500000000000001
Run Code Online (Sandbox Code Playgroud)

舍入工作正常,但IEEE编号不能完全代表1.35.Python 2.7对此更加智能,并且1.35在打印数字时将选择最简单的表示形式.2.7及更早版本中的实际存储值相同.

  • 如果对数字使用`str()`,则长十进制应该消失.(或者使用%f或`.format()`明确约束长度.) (2认同)
  • 在Python 2.6中输入`1.35`也会得到`1.3500000000000001`.Python 2.7和Python 3.x中更新的算法给出了1.35`. (2认同)