gpt4 book ai didi

Python - 如何为 Decimal.quantize 定义舍入比例

转载 作者:行者123 更新时间:2023-12-03 19:04:30 25 4
gpt4 key购买 nike

我写了一个函数,用于将数字四舍五入到点右侧的一定数量的数字。但我仍然不明白如何正确定义与 quantize 一起使用的比例。
在下面的例子中,res1res2返回预期的结果。我发现了不同的例子来定义浮点数后有 2 个数字的比例。使用“1.00”和“0.01”有什么区别?两者似乎以相同的方式工作。
至于res3当我将浮点数传递给 Decimal 构造函数以获取 number_3 - ROUND_HALF_UP似乎不在那里工作。为什么会发生这种情况?我应该如何定义从浮点数创建的小数的比例?
如果我将浮点数作为输入是获得量化工作的唯一方法 - 首先将浮点数转换为字符串?

from decimal import Decimal, ROUND_HALF_UP


def custom_round(dec: Decimal, scale, rounding_mode):
return dec.quantize(Decimal(scale), rounding_mode)


number_1 = Decimal("10.026")
res1 = custom_round(number_1, "1.00", ROUND_HALF_UP)
print(res1) # 10.03

number_2 = Decimal("28.525")
res2 = custom_round(number_2, "0.01", ROUND_HALF_UP)
print(res2) # 28.53

number_3 = Decimal(28.525)
res3 = custom_round(number_3, "0.01", ROUND_HALF_UP)
print(res3) # 28.52

最佳答案

在这种情况下,“1.00”和“0.01”之间没有区别。与二进制浮点数不同,十进制实例具有有效尾随零的概念,它只是内部指数 quantize()使用。的确,

>>> custom_round(Decimal("28.525"), "1234.56", ROUND_HALF_UP)
Decimal('28.53')
>>> custom_round(Decimal("28.525"), "000000.00", ROUND_HALF_UP)
Decimal('28.53')
也以同样的方式工作。
对于你的其他问题,看看什么 number_3转换为:
>>> number_3
Decimal('28.52499999999999857891452847979962825775146484375')
float->decimal 转换是精确的,并且浮点文字 28.525 在内部由一个二进制浮点数表示,该浮点数仅近似于十进制 28.525(其中 不能 完全表示为二进制浮点数 - 您会得到最接近的二进制近似值反而)。该二进制近似值的精确十进制值 - 如图所示 - 比十进制 28.525 小一点。这就是它四舍五入的原因。

关于Python - 如何为 Decimal.quantize 定义舍入比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63980921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com