Python 我想将十进制数从西语阿拉伯语(0,1,2,3,4,5,6)转换为东语阿拉伯语(٠;,١;,٢;,٣;)

Python 我想将十进制数从西语阿拉伯语(0,1,2,3,4,5,6)转换为东语阿拉伯语(٠;,١;,٢;,٣;),python,django,localization,arabic,indic,Python,Django,Localization,Arabic,Indic,python中是否有任何方法可以将十进制数(99.3)转换为(٩) ٩ ٣) 我可以将简单的整数转换成东方阿拉伯语,但问题是十进制 devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹') number = str(numeral) return ''.join(devanagari_nums[int(digit)] for digit in number) 有三种方法(也许更多)来实现这一点。一种是使用输入数字的

python中是否有任何方法可以将十进制数(99.3)转换为(٩) ٩ ٣)

我可以将简单的整数转换成东方阿拉伯语,但问题是十进制

devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹')
number = str(numeral)
return ''.join(devanagari_nums[int(digit)] for digit in number)
有三种方法(也许更多)来实现这一点。一种是使用输入数字的数值(例如,
“6”
转换为
6
)作为具有输出数字的元组的索引。正如您所发现的,这样做的困难在于小数点没有数值。您可以使用
if
-测试解决此问题:

>>> numeral = 12.345
>>> number = str(numeral)
>>> number
'12.345'
>>> digits = [devanagari_nums[int(k)]  if k.isdigit() else k for k in number]
>>> ''.join(digits)
'۱۲۳.۴۵'
当需要查找时,Python程序员几乎会自动查找字典。因此,另一种明显的方法是在查找表中使用字典而不是元组。这相当于明确说明等价性
'6'=>“۶”
,而不是依赖占据元组第6位的

>>> devanagari_nums = {'0':'۰', '1':'۱', '2':'۲', '3':'۳', '4':'۴', '5':'۵', '6':'۶', '7':'۷', '8':'۸', '9':'۹', '.': '.'}
>>> numeral = 12.345
>>> number = str(numeral)
>>> digits = [devanagari_nums[k] for k in number ]
>>> ''.join(digits)
'۱۲۳.۴۵'
您的问题将
99.3
等同于
٩٩.٣
,但我怀疑这更多地与SO编辑器对RTL脚本的处理有关,而不是与您的期望有关,因为您的代码暗示您期望
٩٩.٣
。如果我弄错了,请在
''之前执行
数字.reverse()
。加入(数字)

第三种方法不明显,与您最初的方法相差甚远,因此我将其留到最后:

>>> tx = str.maketrans('0123456789','۰۱۲۳۴۵۶۷۸۹')
>>> number.translate(tx)   # number as defined in the earlier examples
'۱۲۳.۴۵'
这看起来像上面的第一种方式:从输入字符到输出字符的位置映射。在Python2中,这正是它的本质。但是在Python3中,它是第二种方式的变体,如果您检查
tx
,就会很快发现:

>>> tx
{48: 1776, 49: 1777, 50: 1778, 51: 1779, 52: 1780, 53: 1781, 54: 1782, 55: 1783, 56: 1784, 57: 1785}

我想我不需要解释
ord('1')==49
ord('۱')==1777

向我们展示您正在使用的按预期转换整数的代码。我已经添加了有问题的代码。