我正在尝试将bytes对象转换为Decimal
。为了实现它,我首先将其转换为字符串。下面是我将其转换为字符串的功能。
def strPrepare(self, s):
return str(s).strip()
然后我将此函数称为:
x = b'6016.0000'
s = self.strPrepare(x)
d = Decimal(s)
但是使用这段代码我得到的错误是:
发生错误:无法转换b' 6016.0000'到十进制
答案 0 :(得分:1)
要从str
对象获取bytes
,您需要首先使用bytes
函数解码您的bytes.decode()
对象:
>>> my_bytes = b'6016.0000'
>>> my_str = my_bytes.decode()
# where `my_str` holds the string value `'6016.0000'`
或者,您可以通过传递encoding
参数来获得相同的结果,同时将您的bytes对象类型转换为字符串:
>>> my_str = str(my_bytes, encoding='utf-8')
# Here also `my_str` holds the string value `'6016.0000'`
如果对象是
bytes
(或bytearray
)对象,则str(bytes, encoding, errors)
相当于bytes.decode(encoding, errors)
然后,为了将数字字符串my_str
输入到decimal.Decimal
,您可以这样做:
>>> from decimal import Decimal
>>> Decimal(my_str)
Decimal('6016.0000')
在您的代码中,当您使用str()
输入一个没有encoding
参数的字节对象时,它会在开头为您返回一个新的字符串b'...'
:
>>> str(my_bytes)
"b'6016.0000'"
Python's str
document中也提到了这种行为:
在没有编码或错误参数的情况下将
bytes
对象传递给str()
属于第一种返回非正式字符串表示的情况(另请参阅-b
command-line option到Python)。
答案 1 :(得分:0)
而不是strip(),请尝试Decimal(s.decode())
。这使得bytes对象b'6016.0000'
成为一个字符串,应该可以正常工作。