如何在Python中向上取整到十位数
我有一堆浮点数(小数),我想把它们向上舍入到下一个最接近的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 的数字时不太好用,这本来可以省去除法和乘法的麻烦。