在印度、巴基斯坦和孟加拉国等地区,人们使用的数字系统与西方国家的十进制系统有所不同。这种系统基于两位一组的分组方式,而不是西方常见的三位一组。在印度的商务交易中,人们经常会遇到阿拉伯、克罗尔和拉克(见下表)等数字术语,尽管表中列出的更高数字很少使用。这些更常见的术语经常组合使用,例如一拉克克罗尔,即10^12,或者一万亿。有时在印地语中也会使用帕德玛和卡哈布等术语。
印度独特的数字系统:
术语 | 数字 | 西方系统(短标度) | 0的个数 |
---|---|---|---|
拉克(lac) | 1,00,000 | 100,000(十万) | 5 |
克罗尔 | 1,00,00,000 | 10,000,000(千万) | 7 |
阿拉伯 | 1,00,00,00,000 | 1,000,000,000(十亿) | 9 |
卡哈布 | 1,00,00,00,00,000 | 100,000,000,000(百亿) | 11 |
尼尔 | 1,00,00,00,00,00,000 | 10,000,000,000,000(万亿) | 13 |
帕德玛 | 1,00,00,00,00,00,00,000 | 1,000,000,000,000,000(一千万亿) | 15 |
尚克 | 1,00,00,00,00,00,00,00,000 | 100,000,000,000,000,000(一百万亿) | 17 |
马哈-尚克 | 1,00,00,00,00,00,00,00,00,000 | 10,000,000,000,000,000,000(十万亿) | 19 |
使用代码:
请按照以下指定的格式创建XML文档。在XML中添加样式表引用,并在Web浏览器中打开XML(在此XML中,#代表一个数字):
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="TransformNumber.xslt"?>
<numbers>
<number>##########</number>
<number>####</number>
<number>####</number>
<number>#</number>
<number>##########</number>
<number>####</number>
</numbers>
转换算法:
(1234 -> 10234) (10234->010234) value:01 place:3 evaluates to 'One Thousand' value:02 place:2 evaluates to 'Two Hundred' 34 place:1 evaluates to 'Thirty Four' resulting in the string: 'One Thousand Two Hundred Thirty Four'.
读取XML中的每个数字,并检查它是否包含百位值。如果是,请在字符串的第四个位置从右边插入一个'0'字符。(这一步处理了异常,因为在印度的位值数字系统中,只有百位值被评估为单个数字;其余的位置都有成对的值。)
检查字符串在第一步之后是否有奇数个字符。如果是,请在字符串前缀一个'0'字符。(这一步确保字符串包含偶数个字符;因此,字符串将稍后被分割成数字对,并转换为其字符串等效项。)
对于每一对,调用翻译器与对值及其在字符串中的位置。位置是通过将字符串的长度除以2来确定的。
翻译器算法:
每一对包含两个数字。(34 -> 3 + '0' -> 30 -> Thirty) (34 -> 4 -> Four) (3 -> 3-1 -> 2 -> Thousand) 分离第一个数字并在其后追加一个'0'字符。将其转换为其等效的字符串表示。如果值为零,则不执行任何操作。取第二个数字并将其转换为相应的字符串表示。如果值为零,则不执行任何操作。取位置值并将其转换为代表这个字符串对在整个数字中的实际位置。如果位置为零,则不执行任何操作。