首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python将unicode减号转换为浮动

Python将unicode减号转换为浮动
EN

Stack Overflow用户
提问于 2013-10-28 05:17:17
回答 3查看 3.5K关注 0票数 1

我从html中解析了一个字符串: u'\u2212$9.02',(-$9.02)

只需执行float()转换就不起作用。‘十进制’编解码器无法在0位置对u'\u2212‘进行编码:无效十进制Unicode字符串。

也许试着检测到字符串中的‘\u 2212’?但是怎么做呢?

知道怎么做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-28 05:18:29

你可以

代码语言:javascript
运行
复制
s = u'\u2212$9.02'
float(s.replace(u'\u2212', '-').replace('$', ''))

请注意,美元符号也会引起问题。

票数 4
EN

Stack Overflow用户

发布于 2013-10-28 05:34:19

对于货币,我更喜欢使用Decimal模块;而不是处理浮点数:

代码语言:javascript
运行
复制
>>> from decimal import Decimal
>>> i = Decimal(s.replace(u'\u2212','-').replace('$',''))
>>> i
Decimal('-9.02')

你可能想知道为什么?您可以阅读计算机中浮点数的近似,但实际上,这里有一个十进制更有意义的例子:

代码语言:javascript
运行
复制
>>> 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')

以上示例以及取自模块文档的十进制模块的其他用途。

票数 2
EN

Stack Overflow用户

发布于 2013-10-28 05:28:05

您可以使用正则表达式:

代码语言:javascript
运行
复制
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

由于浮点错误,通常最好将货币管理为美分(如有必要则更小)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19627609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档