使用希伯来字母将数字转换为字符串

Convert number to string using Hebrew letters

这可能是一个简单的问题(甚至可能是一个骗局),但我找不到答案 - 如何使用希伯来字母打印数字?

我尝试使用格式提供程序更改应用程序语言and/or:

myTextBox.Text = 555.ToString(new System.Globalization.CultureInfo("he-IL"));

但我看不到希伯来字母。

在希伯来语中,我们使用与英语相同的数字。但是,希伯来字母可以表示数字。
א为1,ב为2,依此类推。但是在你到达 י 即 10 之后,下一个字母是 כ,但它代表 20。所以 11 将是 י"א。 (这是希伯来文的写法,字母之间有 " 标记)。
您的下一个字母将是 30,依此类推,直到您达到 100,然后下一个是 200、300,最后一个字母是 400 (ת)。

整个希伯来字母表是:
(注意希伯来字母是从右到左写的,意思是 א 是第一行,י 是第一行的最后一个)
אבגדהוזחטי(即 1 到 10)
כלמנסעפצ(即 20 到 90)
קשת(即 100 到 400)

(也有一些空格字母的结尾形式不同,但它们的数值与普通字母的数值相同,例如ך就是字母[=13=的写法]如果是单词的最后一个字母,但数值还是20)

因此数字 600 可能会转换为 ררר,或 תר,或任何字母组合总和为 600。当然,如果您这样做,这可能会给您带来问题想将数字翻译成希伯来字母。

我可能会选择尽可能短的组合,因此请测试可以递归使用的最高价值字母,直到您可以将所有字母加起来等于所请求的数字。

正如 Zohar 所说,在大多数情况下,希伯来语使用与英语相同的印度-阿拉伯数字。如果你真的想用希伯来字母写出一个数字,一个简单的方法是:

public static string FormatHebrew(this int num)
{
  if(num <= 0)
    throw new ArgumentOutOfRangeException();
  StringBuilder ret = new StringBuilder(new string ('ת', num / 400));
  num %= 400;
  if(num >= 100)
  {
    ret.Append("קרש"[num / 100 - 1]);
    num %= 100;
  }
  switch(num)
  {
    // Avoid letter combinations from the Tetragrammaton
    case 16:
      ret.Append("טז");
      break;
    case 15:
      ret.Append("טו");
      break;
    default:
      if (num >= 10)
      {
        ret.Append("כלמנסעפצי"[num / 10 - 1]);
        num %= 10;
      }
      if(num > 0)
        ret.Append ("אבגדהוזחט" [num - 1]);
        break;
  }
  return ret.ToString ();
}

(请确保您的文本编辑器正确处理字符串的顺序,主要是编译器看到的源代码按从低到高的顺序排列。一个好的文本编辑器会显示这与希伯来语使用的从右到左的顺序一样,但有些人会显示它与此相反)。

static String[] let1000 = { " א'", " ב'", " ג'", " ד'", " ה'" };
static String[] let100 = { "ק", "ר", "ש", "ת" };
static String[] let10 = { "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ" };
static String[] let1 = { "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט" };

public static String FormatHebrew(int num) 抛出异常 {

    if (num <= 0 || num >= 6000)
        throw new Exception();
    StringBuilder ret = new StringBuilder();

    if (num >= 100) {
        if (num >= 1000 & num < 6000) {

            ret.append(let1000[num / 1000 - 1]);
            num %= 1000;
        }

        if (num < 500) {

            ret.append(let100[(num / 100) - 1]);

        } else if (num >= 500 && num < 900) {
            ret.append("ת");
            ret.append(let100[((num - 400) / 100) - 1]);
        } else if (num >= 900 && num < 1000) {
            ret.append("תת");
            ret.append(let100[((num - 800) / 100) - 1]);

        }

        num %= 100;
    }
    switch (num) {
    // Avoid letter combinations from the Tetragrammaton
    case 16:
        ret.append("טז");
        break;
    case 15:
        ret.append("טו");
        break;
    default:
        if (num >= 10) {

            ret.append(let10[(num / 10) - 1]);
            num %= 10;
        }
        if (num > 0) {

            ret.append(let1[num - 1]);
        }
        break;
    }
    return ret.toString();
}