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

时间:2018-03-09 11:25:49

标签: python django localization arabic indic

在python中有什么方法可以将十进制数字(99.3)转换为(9 9 .3)

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

std::addressof()

1 个答案:

答案 0 :(得分:1)

有三种方法(可能更多)来解决这个问题。一种是使用输入数字的数值(例如"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脚本有关,而不是与您的期望有关,因为您的代码暗示您期望٩٩.٣。如果我错了,请在digits.reverse()之前''.join(digits)

第三种方式是不明显的,与你原来的方法相差甚远,所以我把它留到了最后:

>>> tx = str.maketrans('0123456789','۰۱۲۳۴۵۶۷۸۹')
>>> number.translate(tx)   # number as defined in the earlier examples
'۱۲۳.۴۵'

这看起来像上面的第一种方式:从输入字符到输出字符的位置映射。在Python 2中,它正是它的本质。但是在Python 3的引擎盖下它是第二种方式的变体,因为你会很快发现你是否检查tx

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

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