Python 中递增到最后一位小数

问题描述 投票:0回答:1

我想在给定浮点数或字符串时在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
python python-3.x floating-point decimal increment
1个回答
0
投票

这是一个可行的解决方案

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}"))
    再次对其进行量化以消除不精确性。
© www.soinside.com 2019 - 2024. All rights reserved.