C# 使用希伯来字母将数字转换为字符串
这可能是一个简单的问题(甚至可能是一个骗局),但我找不到答案-如何用希伯来文字母打印数字 我已尝试更改应用程序语言和/或使用格式提供程序:C# 使用希伯来字母将数字转换为字符串,c#,windows,windows-phone,windows-phone-8.1,globalization,C#,Windows,Windows Phone,Windows Phone 8.1,Globalization,这可能是一个简单的问题(甚至可能是一个骗局),但我找不到答案-如何用希伯来文字母打印数字 我已尝试更改应用程序语言和/或使用格式提供程序: myTextBox.Text = 555.ToString(new System.Globalization.CultureInfo("he-IL")); 但我找不到希伯来字母 在希伯来语中,我们使用与英语相同的数字。然而,希伯来字母可以表示数字。 对于א即1,ב为2,依此类推。但是当你到达י后,下一个字母是כ,但它代表20。所以11应该是י“א(这是用希
myTextBox.Text = 555.ToString(new System.Globalization.CultureInfo("he-IL"));
但我找不到希伯来字母 在希伯来语中,我们使用与英语相同的数字。然而,希伯来字母可以表示数字。
对于
א
即1,ב
为2,依此类推。但是当你到达י
后,下一个字母是כ
,但它代表20。所以11应该是י“א
(这是用希伯来语写的,字母之间有标记)。你的下一个字母是30,以此类推,直到你达到100,然后下一个字母是200,300,最后一个字母是400(
ת
)
整个希伯来语字母表是:(请注意,希伯来文字母是从右到左书写的,这意味着
א
是第一行的第一个字母,י
是第一行的最后一个字母)(1比10)
(20比90)
קרשת(即100到400) (有些空间字母的结尾形式不同,但它们的数字值与普通字母相同。例如,
ך
是书写字母כ
的方法,如果它是单词的最后一个字母,但数字值仍然是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 ();
}
publicstaticstringformathebrew(这个int-num)
{
如果(num=100)
{
ret.Append(“num/100-1”);
num%=100;
}
开关(num)
{
//避免使用四字母组合
案例16:
回复附加(“טז”);
打破
案例15:
回复附加(“טו”);
打破
违约:
如果(数值>=10)
{
ret.Append(“num/10-1”);
num%=10;
}
如果(数值>0)
ret.Append(“num-1”);
打破
}
返回ret.ToString();
}
(请确保文本编辑器正确处理字符串的顺序,主要是编译器看到的源代码的顺序是从低到高。一个好的文本编辑器会显示从右到左的顺序,就像希伯来语使用的顺序一样,但有些编辑器会显示相反的顺序)
公共静态字符串格式Hebrew(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();
}
if(num=6000)
抛出新异常();
StringBuilder ret=新的StringBuilder();
如果(数值>=100){
如果(数值>=1000&num<6000){
ret.append(let1000[num/1000-1]);
num%=1000;
}
如果(数量<500){
ret.append(let100[(num/100)-1]);
}否则如果(数值>=500&&num<900){
ret.append(“ת”);
ret.append(let100[((num-400)/100)-1]);
}否则如果(数值>=900&&num<1000){
ret.append(“תת”);
ret.append(let100[(num-800)/100)-1]);
}
num%=100;
}
开关(num){
//避免使用四字母组合
案例16:
回复附加(“טז”);
打破
案例15:
回复附加(“טו”);
打破
违约:
如果(数值>=10){
ret.append(let10[(num/10)-1]);
num%=10;
}
如果(数值>0){
ret.append(let1[num-1]);
}
打破
}
返回ret.toString();
}
您希望看到הנתתק抱歉第一句话-我对希伯来语一点也不熟悉,只是从中复制了符号。一旦我这样做了,文本框就开始不稳定,所以我无法完成评论。这就是你期望看到的吗?(符号是从左到右的,但很明显,我不知道这是否正确。我只是想澄清一下。是的,我刚刚改变了模拟器的语言,发现确实使用了与英语中相同的十进制字母。谢谢你提供希伯来数字如何工作的详细信息。好吧,如果你不能从犹太人那里得到这个,你从哪里能得到它是的,那是最好的消息来源。有趣的是,数字可以用几种不同的方式来表示。罗马数字也是如此,尽管人们倾向于尽可能简洁,但奇怪的是IIII在时钟面上往往比IV更受青睐。很好!但这并不能解释ט“ו”和ז“ז”。还有,在第一行,你的意思是:num@AYS关于支票开头的内容是正确的,谢谢。另一方面,你指的是避免击中弦内的四重奏吗?是的,我指的是这个。是的,既然重点是提供至少一种可能的传统编码方式,既然避免这两种组合是传统的一部分,我真的应该这样做,我会在早上编辑。看起来像个bug-字符串“㪚סעפצי”应该是“ינססעפ”(yud-10-移动到字符串的开头)。当您想要将希伯来年份从数字转换为希伯来字母时,此代码非常适用
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();
}