将数字的最后 n 位转换为零

S J*_*esh 5 python

在Python中,将数字的最后一位数字替换为零并保持前三位数字不变的最佳方法是什么?

例子:

23456789 -> 23400000
112022 -> 112000
1111-> 1110
111 -> 111 (no conversion)
Run Code Online (Sandbox Code Playgroud)

Reb*_*que 5

round接受一个负参数,这非常有用,但它对结果进行四舍五入,这可能不完全是你想要的:

a = 23456789
round(a, -4)
Run Code Online (Sandbox Code Playgroud)

输出:

23460000
Run Code Online (Sandbox Code Playgroud)

如果您不想舍入,您可以使用一个小的辅助函数,也许像这样:

import math

def significant(num, signum):

    expo = 10**(int(math.log(num, 10)) - signum + 1)
    return expo * (num // expo)

significant(12345, 3)
Run Code Online (Sandbox Code Playgroud)

输出:

12300
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是四舍五入,不会给出预期的输出,即 2346...而不是 2345... (3认同)
  • 是的,你是对的@jpp - 尽管负数的舍入相当有用。我添加了一个简短的助手,它返回具有指定有效数字的数字。 (2认同)