如何在python中整数整数

我想在python中整数整数。 我看着内置的round()函数,但看起来那轮是浮动的。

我的目标是将整数舍入到最接近的10的倍数。即:5> 10,4→0,95→100等

5以上应该舍入,4以下应该舍去。

这是我有这样的代码:

def round_int(x): last_dig = int(str(x)[-1]) if last_dig >= 5: x += 10 return (x/10) * 10 

这是实现我想达到的最好方法吗? 有没有一个内置的function,这样做? 另外,如果这是最好的方法,那么我在testing中错过的代码有什么问题吗?

其实,你仍然可以使用循环function:

 >>> print round(1123.456789, -1) 1120.0 

这将是最接近的10的倍数。到100将是-2作为第二个参数等等。

round()可以为小数点左边的位置取整数和负数。 返回值仍然是一个浮点数,但简单的转换可以修复:

 >>> int(round(5678,-1)) 5680 >>> int(round(5678,-2)) 5700 >>> int(round(5678,-3)) 6000 

稍微简单一点:

 def round_int(x): return 10 * ((x + 5) // 10) 

关于返回一个float的round(..)函数

这个float(Python中的双精度)总是一个整数的完美表示,只要它在[-2 53 .2 53 ]的范围内即可。 (Pedant注意:在双打中这不是二的补码,所以范围是零对称的。)

详情请参阅此处的讨论 。

这个函数可以是数量级(从右到左),也可以是与数字格式相同的方式来处理浮点小数位(从左到右:

 def intround(n, p): ''' rounds an intger. if "p"<0, p is a exponent of 10; if p>0, left to right digits ''' if p==0: return n if p>0: ln=len(str(n)) p=p-ln+1 if n<0 else p-ln return (n + 5 * 10**(-p-1)) // 10**-p * 10**-p >>> tgt=5555555 >>> d=2 >>> print('\t{} rounded to {} places:\n\t{} right to left \n\t{} left to right'.format( tgt,d,intround(tgt,-d), intround(tgt,d))) 

打印

 5555555 rounded to 2 places: 5555600 right to left 5600000 left to right 

你也可以使用Decimal类:

 import decimal import sys def ri(i, prec=6): ic=long if sys.version_info.major<3 else int with decimal.localcontext() as lct: if prec>0: lct.prec=prec else: lct.prec=len(str(decimal.Decimal(i)))+prec n=ic(decimal.Decimal(i)+decimal.Decimal('0')) return n 

在Python 3中,你可以可靠地使用带有负数位的圆,并得到一个四舍五入的整数:

 def intround2(n, p): ''' will fail with larger floating point numbers on Py2 and require a cast to an int ''' if p>0: return round(n, p-len(str(n))+1) else: return round(n, p) 

在Python 2中,round将无法在较大的数字上返回合适的整数整数,因为round总是返回一个float:

 >>> round(2**34, -5) 17179900000.0 # OK >>> round(2**64, -5) 1.84467440737096e+19 # wrong 

其他两个函数在Python 2和3上工作

我想要做同样的事情,但用5而不是10,并提出了一个简单的function。 希望它是有用的:

 def roundToFive(num): remaining = num % 5 if remaining in range(0, 3): return num - remaining return num + (5 - remaining) 

如果你想要algebric的forms,仍然使用它,它很难变得比以下更简单:

 interval = 5 n = 4 print(round(n/interval))*interval