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

时间:2015-06-05 20:23:32

标签: c# windows windows-phone windows-phone-8.1 globalization

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

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

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

但我无法收到希伯来文字母。

3 个答案:

答案 0 :(得分:4)

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

内含希伯来字母是:
(请注意,希伯来字母是从右到左书写的,这意味着א是第一行而י是第一行中的最后一行)
אבגדהוזחטי(1到10)
כלמנסעפ((20至90)
קרשת(100至400)

(有一些空格字母用不同的形式来结束一个单词,但它们与常规字母具有相同的数值。例如,ך是写字母כ的方式。这是一个单词的最后一个字母,但数字值仍为20)

因此,数字600可能会转换为שש"שש"ת,或任何总和为600的字母组合。当然,如果您愿意,这可能会对您造成问题将数字翻译成希伯来字母。

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

答案 1 :(得分:4)

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

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 ();
}

(确保您的文本编辑器正确处理字符串的排序,主要是编译器看到的源代码具有从低到高的顺序。一个好的文本编辑器将显示为从右到左,希伯来语使用的顺序,但是有些人会从中反过来表示。)

答案 2 :(得分:0)

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

公共静态字符串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();
}