我想在给定浮点数或字符串时在Python中编写函数,例如0.003214以返回0.003215,但如果我给它0.00321以返回0.003211,它将适用于其他浮点数,例如0.0000324 - > 0.00003241。请帮忙!
def add_one_at_last_digit(v):
after_comma = Decimal(v).as_tuple()[-1]*-1
add = Decimal(1) / Decimal(10**after_comma)
return Decimal(v) + add
这是一个可行的解决方案
from decimal import Decimal
def add_one_at_last_digit(v):
d = Decimal(str(v))
decimal_places = abs(d.as_tuple().exponent)
add = Decimal(f"1e-{decimal_places}")
result = (d + add).quantize(Decimal(f"1e-{decimal_places}"))
return float(result)
关键思想是:
d = Decimal(str(v))
给出具有精确小数位数的 Decimal 对象。字符串转换在这里起到了作用。例如>>> Decimal(213.4)
Decimal('213.400000000000005684341886080801486968994140625')
>>> Decimal("213.4")
Decimal('213.4')
您没有在解决方案中执行此操作,这就是您的
after_comma
错误的原因。
abs(d.as_tuple().exponent)
给出精确的小数位数。(d + add).quantize(Decimal(f"1e-{decimal_places}"))
再次对其进行量化以消除不精确性。