我从html中解析了一个字符串: u'\u2212$9.02',(-$9.02)
只需执行float()转换就不起作用。‘十进制’编解码器无法在0位置对u'\u2212‘进行编码:无效十进制Unicode字符串。
也许试着检测到字符串中的‘\u 2212’?但是怎么做呢?
知道怎么做吗?
发布于 2013-10-28 05:18:29
你可以
s = u'\u2212$9.02'
float(s.replace(u'\u2212', '-').replace('$', ''))请注意,美元符号也会引起问题。
发布于 2013-10-28 05:34:19
对于货币,我更喜欢使用Decimal模块;而不是处理浮点数:
>>> from decimal import Decimal
>>> i = Decimal(s.replace(u'\u2212','-').replace('$',''))
>>> i
Decimal('-9.02')你可能想知道为什么?您可以阅读计算机中浮点数的近似,但实际上,这里有一个十进制更有意义的例子:
>>> 1.1 + 2.2
3.3000000000000003
>>> Decimal('1.1') + Decimal('2.2')
Decimal('3.3')
>>> 1.30 + 1.20
2.5
>>> Decimal('1.30') + Decimal('1.20')
Decimal('2.50')以上示例以及取自模块文档的十进制模块的其他用途。
发布于 2013-10-28 05:28:05
您可以使用正则表达式:
import re
def currency_to_cents(s):
m = re.match(r"([−+]?)\$(\d+)(?:\.(\d+))?", s)
if m is None:
raise ValueError("{!r} is not correctly-formatted currency".format(s))
sign, dollars, cents = m.groups()
amount = int(dollars) * 100
if cents:
amount += int(cents)
if sign == "−":
amount = -amount
return amount由于浮点错误,通常最好将货币管理为美分(如有必要则更小)。
https://stackoverflow.com/questions/19627609
复制相似问题