根据我之前的问题
How do I convert unicode characters to floats in Python?,我想找到一个更优雅的解决方案来计算包含unicode数值的字符串的值.
例如,取字符串“1⅕”和“1⅕”.我希望这些解决到1.2
我知道我可以逐个字符地迭代,检查每个字符的unicodedata.category(x)==“否”,并通过unicodedata.numeric(x)转换unicode字符.然后我必须拆分字符串并对值求和.然而,这似乎相当黑客和不稳定.在Python中有更优雅的解决方案吗?
最佳答案 我想这就是你想要的……
import unicodedata
def eval_unicode(s):
#sum all the unicode fractions
u = sum(map(unicodedata.numeric, filter(lambda x: unicodedata.category(x)=="No",s)))
#eval the regular digits (with optional dot) as a float, or default to 0
n = float("".join(filter(lambda x:x.isdigit() or x==".", s)) or 0)
return n+u
或“全面”的解决方案,对于喜欢这种风格的人:
import unicodedata
def eval_unicode(s):
#sum all the unicode fractions
u = sum(unicodedata.numeric(i) for i in s if unicodedata.category(i)=="No")
#eval the regular digits (with optional dot) as a float, or default to 0
n = float("".join(i for i in s if i.isdigit() or i==".") or 0)
return n+u
但要注意,有许多unicode值似乎没有在python中分配数值(例如⅜⅝不起作用……或者可能只是我的键盘xD的问题).
关于实施的另一个注意事项:它“过于强大”,即使是“123½3½”这样的错误数字也会起作用,并将其评估为1234.0 ……但如果有多个点,它将无效.