gpt4 book ai didi

python - 十进制模块 : rounding

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:04 25 4
gpt4 key购买 nike

我在获取所需值时遇到了一些问题。

以下“abc”字符串表示角度。“结果”字符串代表我正在寻找的值。

a = '199.1224'
result = '199.122400000000000'

b = '199.0362'
result = '199.036200000000010'

c = '-199.9591'
result = '-199.959100000000010'

我使用以下代码:

Decimal(float(a)).quantize(Decimal('.000000000000001'), rounding=ROUND_HALF_UP)

results in
a = 199.122399999999999
b = 199.036200000000008
c = -199.959100000000007

我不是数学天才,在 Decimal 模块中尝试了几乎所有可能的方法,但我似乎无法找到正确的方法来获得我需要的结果。

作为一个蹩脚的解决方法,我使用:

Decimal(float(a)).quantize(Decimal('.00000000000001'), rounding=ROUND_HALF_UP)
str(a)+'0'

所以用少一位小数进行量化,转换为字符串(无论如何都必须这样做)并添加一个零。这让我得到了具有数千个这些值的正确的期望结果。但我想知道是否有正确的方法来四舍五入并以零结尾(不知道这个的英文单词)。

最佳答案

我认为问题在于使用float(a)。对于大多数终止小数部分,浮点类型没有精确表示。我用过:

from decimal import *
b = '199.0362'
Decimal(float(b)).quantize(Decimal('.000000000000001'), rounding=ROUND_HALF_UP)
Decimal(b).quantize(Decimal('.000000000000001'), rounding=ROUND_HALF_UP)

并获取 Decimal('199.036200000000008'),就像您在第一个中所做的那样,但在第二个中获取 Decimal('199.036200000000000')。那么...float() 转换对您有何作用,您不能只使用第二个版本?

如果您需要从计算的浮点结果中获取输入,请记住您只能获得大约 52 位有效位,或者大约 52*log10(2) ~~ 15.6 个十进制数字。所以第 16 位有效数字可能没有正确舍入,出于实际目的,通常取为 15。您可以使用格式函数在字符串中获得舍入结果:

format(float(b), ".15g")

这将抑制尾随小数零,并在更方便时切换为科学记数法。但它会将结果四舍五入到 15 位有效数字。您可能必须将结果格式化为所需的固定小数位数:

d = Decimal(float(b), ".15g")
print ("d = " + format(d, ".12f"))

关于python - 十进制模块 : rounding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446628/

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