gpt4 book ai didi

python - 将 float 转换为十进制保留 str() 表示

转载 作者:行者123 更新时间:2023-11-28 20:59:20 28 4
gpt4 key购买 nike

我正在尝试对 decimal.Decimal 进行子类化,以便将 float 视为字符串,而字符串又被视为小数。

代替:

>>> decimal.Decimal(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')

我将 float 转换为 str,后者又转换为 Decimal:

>>> decimal.Decimal(str(1.1))
Decimal('1.1')

因为我发现自己经常这样做,所以我决定将 Decimal 子类化。但以下代码在 Python 3.6.4 中抛出异常:

import decimal

class D(decimal.Decimal):
def __new__(self, value="0", context=None):
value = str(value)
super().__new__(value, context)

d = D(1.1)
print(d)

回溯:

Traceback (most recent call last):
File "C:/Users/Better/.PyCharmCE2018.1/config/scratches/scratch_4.py", line 8, in <module>
d = D(1.1)
File "C:/Users/Better/.PyCharmCE2018.1/config/scratches/scratch_4.py", line 6, in __new__
super().__new__(value, context)
TypeError: decimal.Decimal.__new__(X): X is not a type object (str)

解决方案是什么?

最佳答案

您向 __new__ 传递了错误的参数,并且没有返回任何内容。

Documentation on how to use __new__

class D(decimal.Decimal):

def __new__(cls, value="0", context=None):
value = str(value)
return super().__new__(cls, value, context)

话虽如此,您可能应该在这里使用 __init__,因为您没有进行任何需要使用 __new__ 的类类型操作。

class D(decimal.Decimal):

def __init__(self, value="0", context=None):
value = str(value)
super().__init__(self, value, context)

关于python - 将 float 转换为十进制保留 str() 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785427/

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