如何在Python中向上取整到十位数

8 投票
4 回答
2972 浏览
提问于 2025-04-16 05:51

我有一堆浮点数(小数),我想把它们向上舍入到下一个最接近的10的倍数。

比如说:

10.2 should be 20
10.0 should be 10
16.7 should be 20
94.9 should be 100

我只需要处理0到100之间的数。我试过使用math.ceil(),但它只会向上舍入到最近的整数。

提前谢谢你们。

4 个回答

1

这里的答案有很多问题。例如,11*1.1 - 2.1 = 10.0,对吧?但是等等:

>>> x = 11*1.1 - 2.1
>>> int(ceil(x / 10.0)) * 10
20
>>> x
10.000000000000002
>>> 

你可以试试这个

int(ceil(round(x, 12) / 10.0)) * 10

不过,选择要保留的小数位数其实很难,因为很难预测浮点数的误差是怎么累积的。如果你希望每次都能准确无误,那就需要使用定点运算或者Decimal类型。

4
>>> x = 16.7
>>> int( 10 * math.ceil(x/10.0))

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

15
from math import ceil

def ceil_to_tens(x):
    return int(ceil(x / 10.0)) * 10

编辑: 好吧,现在我因为这个回答得到了一个不该有的“不错的回答”徽章,我觉得应该给大家提供一个使用 decimal 模块的正确解决方案,这样就不会遇到这些问题了 :) 感谢 Jeff 提醒我这一点。那么,使用 decimal 的解决方案如下:

from decimal import Decimal, ROUND_UP

def ceil_to_tens_decimal(x):
    return (Decimal(x) / 10).quantize(1, rounding=ROUND_UP) * 10

当然,上面的代码要求 x 必须是一个整数、字符串或 Decimal 对象 - 浮点数是行不通的,因为那样就失去了使用 decimal 模块的意义。

可惜的是,Decimal.quantize 在处理大于 1 的数字时不太好用,这本来可以省去除法和乘法的麻烦。

撰写回答