Python:如何将数字向下舍入到下一个1000

5
在Python中,有一个内置函数round(),它会像这样舍入数字:
round(1900, -3) == 2000

有没有内置的函数可以将数字向下取整,就像这样:

function(1900, -3) == 1000

math.floor()? - dhke
你想要向下舍入多少?我的意思是,向下舍入到个位、小数点后一位、百位、千位等不是同样的。 - jalazbe
这应该会有所帮助:https://dev59.com/Y1sX5IYBdhLWcg3wRdp_ - Mad Physicist
可能是Python向自定义步长舍入的重复问题。 - tahesse
4个回答

4
您可以使用地板除法:
def round_down(x, k=3):
    n = 10**k
    return x // n * n

res = round_down(1900)  # 1000

math.floor也可以使用,但会降低性能,请参见Python整数除法运算符与math.floor


2
也许你可以尝试这种方法。
import math
math.floor(1900 / 100) * 100

看起来不错(+1)。用户侯月源的想法是将其带到您想要舍入的精度级别(更改数量级顺序),然后在舍入后执行反向操作。 侯月源唯一剩下的就是将其放入一个函数中以适应OP的需求。 :-) - tahesse

0

math.floor([field]) 四舍五入到下一个整数

math.ceil([field]/1000)*1000 四舍五入到下一个千位整数

也许在此之后您可以进行 int 强制转换。

如果您喜欢指数参数的语法,可以定义自己的函数:

import math

def floorTo10ths(number, exp):
     return int(math.floor(number/10**exp) * 10**exp) 

floorTo10ths(1900, 3)

0
def arroundSup(number, power) :
   nbr = number / (1000*power)
   return ceil(nbr) * (1000*power)


arroundSup(1900, 3) # will return 2000

---------------------------------------------------

def arroundLow(number, power) :
   nbr = number / (1000*power)
   return floor(nbr) * (1000*power)


arroundLow(1900, 3) # will return 1000

会返回1000。不,它返回0。请在提交之前测试代码。 - General Grievance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接