gpt4 book ai didi

python - 转换为 float 而不舍入小数位

转载 作者:太空狗 更新时间:2023-10-30 01:49:12 25 4
gpt4 key购买 nike

我有一个列表,其中包含一个特定的数字 '5.74536541',我将其转换为 float 。

我在 Python 3 中使用 ("%0.2f"% (variable)) 打印出来,但它总是打印出 5.75 而不是 5.74。

我知道你在想谁在乎,但这是一个货币转换器程序,我不希望货币向上/向下舍入,但准确地说。

我怎样才能既不四舍五入又保留小数点后两位?

最佳答案

由于您提到的舍入误差,您不应该将 float 用于货币。

最好的办法是使用 fixed-precision decimal您还可以完全控制舍入和截断的工作方式。来自文档:

>>> from decimal import *
>>> getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999,
capitals=1, flags=[], traps=[Overflow, DivisionByZero,
InvalidOperation])

>>> getcontext().prec = 6
>>> Decimal('3.0')
Decimal('3.0')
>>> Decimal('3.1415926535')
Decimal('3.1415926535')
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')
>>> getcontext().rounding = ROUND_UP
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85988')

您应该在内部将所有基于货币的值表示为具有高精度的Decimals(在您的情况下,标准精度级别应该没问题 - 只需保留 prec !)。如果您想向用户打印格式良好的美元和美分值,使用 locale 模块是一种直接的方法。

打印时要小心,因为您必须将 Decimal 量化为正确的显示位数,否则舍入将不会基于您的 Decimal 上下文!您应该只对最终显示或单个最终值执行 quantize 步骤 - 所有中间步骤都应使用高精度 Decimal 以使任何操作尽可能准确.

>>> from decimal import *
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'en_AU.UTF-8'
>>> getcontext().rounding = ROUND_DOWN
>>> TWOPLACES = Decimal(10) ** -2
>>> var = Decimal('5.74536541')
Decimal('5.74536541')
>>> var.quantize(TWOPLACES)
Decimal('5.74')
>>> locale.currency(var.quantize(TWOPLACES))
'$5.74'

关于python - 转换为 float 而不舍入小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695692/

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