gpt4 book ai didi

python - 使用标准库 Decimal 将运算符应用于非常长的十进制数时抑制科学记数法

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

使用标准库 'decimal',给定两个字符串:

import decimal
value1 = "992389829398023985092982398023923023.32598203985902"
value2 = "138582939807398509298239235233.3259822352359235203952093"

可以单独评估字符串并保留小数:

>>>> decimal.Decimal(value1)
Decimal("992389829398023985092982398023923023.32598203985902")
>>>> decimal.Decimal(value2)
Decima2("138582939807398509298239235233.3259822352359235203952093")

应用运算符后,结果转换为科学记数法,精度丢失:

>>>> decimal.Decimal(value1) - decimal.Decimal(value2)
Decimal('9.923896908150841776944730998E+35')

格式化小数精度不保留小数值:

>>>> print("%.40f" % (decimal.Decimal(value1)-decimal.Decimal(value2)))
992389690815084186020235597584531456.0000000000000000000000000000000000000000

如何对非常大的小数执行运算,同时保持小数精度的完整性,同时抑制科学记数法?

最佳答案

尝试使用 context 设置精度:

import decimal
from decimal import localcontext
value1 = "992389829398023985092982398023923023.32598203985902"
value2 = "138582939807398509298239235233.3259822352359235203952093"


with localcontext() as ctx:
#your desired precision in # of digits
ctx.prec = 100
print("{:.40f}".format(decimal.Decimal(value1) - decimal.Decimal(value2)))

或者简单地设置全局值:

decimal.getcontext().prec = 100
print("{:.40f}".format(decimal.Decimal(value1) - decimal.Decimal(value2)))

输出:

992389690815084177694473099784687789.9999998046230964796047907000000000000000

或通过打印语句(即 decimal.Decimal(value1) - decimal.Decimal(value2)):

Decimal('992389690815084177694473099784687789.9999998046230964796047907')

关于python - 使用标准库 Decimal 将运算符应用于非常长的十进制数时抑制科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039778/

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