阿拉伯语和中文有自己的数字字形。
int
可以正确地使用所有不同的方式来编写数字。
我无法重现行为(python 3.5.0)
>>> from unicodedata import name
>>> name('')
'RUMI DIGIT FIVE'
>>> int('')
ValueError: invalid literal for int() with base 10: ''
>>> int('五') # chinese/japanese number five
ValueError: invalid literal for int() with base 10: '五'
我做错了吗?或者说索赔是不正确的(source)。
答案 0 :(得分:5)
这是一种转换为数值的方法(转换为int
并不适用于所有情况,除非在某处有秘密设置)
from unicodedata import numeric
print(numeric('五'))
结果:5.0
有人注意到(并且是对的)一些阿拉伯语或其他字符与int
一起正常工作,因此可以执行具有回退机制的例程:
from unicodedata import numeric
def to_integer(s):
try:
r = int(s)
except ValueError:
r = int(numeric(s))
return r
编辑:正如zvone所指出的,有些分数字符会返回浮点数:ex:numeric('\u00be') is 0.75
(3/4 char)。因此,舍入到int并不总是安全的。
EDIT2:numeric
函数只接受一个字符。因此,“转换为数字”可以处理大多数没有舍入风险的情况
from unicodedata import numeric
def to_float(s):
try:
r = float(s)
except ValueError:
r = numeric(s)
return r
print(to_float('۵۵'))
print(to_float('五'))
print(to_float('¾'))
结果:
55.0
5.0
0.75
(我不想窃取user2357112出色的解释,但仍想提供一个试图涵盖所有案例的解决方案)
答案 1 :(得分:5)
答案 2 :(得分:-1)
来源不正确。
来自python doc:
class int(x,base = 10)
返回一个由a构造的整数对象 数字或字符串x,如果没有给出参数,则返回0。如果x是a number,return x .__ int __()。对于浮点数,这会截断 零。
如果x不是数字或者给出了base,那么x必须是一个字符串, bytes或bytearray实例表示基数中的整数文字 基即可。
整数文字只是一串数字。
编辑:错误,挖掘源代码并发现当python想要将字符串转换为int时调用this函数。有一个 py_CHARMASK 我猜包含我们需要的信息,但我找不到它:/