如何在Python中将Unicode字符转换为浮点数?

14 投票
7 回答
17565 浏览
提问于 2025-04-15 13:32

我正在解析一个网页,这个网页上有一些分数的Unicode表示法。我想直接把这些字符串转换成浮点数。比如:

“⅕”应该变成0.2

有没有什么建议可以在Python中做到这一点?

7 个回答

1

因为Unicode中定义的分数数量是有限的,所以使用字典来存储这些分数看起来是个不错的主意:

Fractions = {
    u'¼': 0.25,
    u'½': 0.5,
    u'¾': 0.75,
    u'⅕': 0.2,
    # add any other fractions here
}

更新:其实使用unicodedata模块会是一个更好的解决方案。

6

这些浮点数的Unicode表示叫做普通分数

你可以使用unicodedata.numeric(char)把它们转换成浮点数。

不过,numeric(char)对像这样的字符是没用的。要处理这种情况,需要多花点功夫:

from unicodedata import numeric

samples = ["3¼","19¼","3 ¼","10"]

for i in samples:
    if len(i) == 1:
        v = numeric(i)
    elif i[-1].isdigit():
        # normal number, ending in [0-9]
        v = float(i)
    else:
        # Assume the last character is a vulgar fraction
        v = float(i[:-1]) + numeric(i[-1])
    print(i, v)

输出结果:

3¼ 3.25
19¼ 19.25
3 ¼ 3.25
10 10.0

你可能还想用正则表达式从更广泛的用户输入中提取这些普通分数。你可以通过它们的Unicode字符编码范围来实现:

/[\u2150-\u215E\u00BC-\u00BE]/g

示例:https://regexr.com/3p8nd

33

你想使用 unicodedata 这个模块:

import unicodedata
unicodedata.numeric(u'⅕')

这段代码会输出:

0.20000000000000001

如果这个字符没有数字值,那么 unicodedata.numeric(unichr[, default]) 会返回一个默认值,如果没有提供默认值,就会报错 ValueError。

撰写回答