如何将bytes对象转换为字符串然后将其转换为Decimal?

时间:2018-02-02 23:16:38

标签: python string python-3.x bytestring

我正在尝试将bytes对象转换为Decimal。为了实现它,我首先将其转换为字符串。下面是我将其转换为字符串的功能。

def strPrepare(self, s):
    return str(s).strip()

然后我将此函数称为:

x = b'6016.0000'
s = self.strPrepare(x)
d = Decimal(s)

但是使用这段代码我得到的错误是:

  

发生错误:无法转换b' 6016.0000'到十进制

2 个答案:

答案 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'`

正如Python's str document所说:

  

如果对象是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'成为一个字符串,应该可以正常工作。