如何将英文数字转换为阿拉伯数字,例如 196 转换为١٩٦?
How to convert an English number to an Arabic number e.g., 196 to ١٩٦?
有谁知道如何将 英语 数字如 196
转换为 阿拉伯语 形式如 ١٩٦
在 .Net 核心 C# 中。
foreach (DataRow dr in ds.Tables[0].Rows)
{
lstSurahs.Add(new Quran
{
ID = Convert.ToInt32(dr["ID"].ToString()),
DatabaseID = Convert.ToInt32(dr["DatabaseID"].ToString()),
SuraID = Convert.ToInt32(dr["SuraID"].ToString()),
// Need Arabic Form
VerseID = Convert.ToInt32(dr["VerseID"].ToString().ConvertNumerals()),
AyahText = dr["AyahText"].ToString()
});
}
以下方法应该如您所愿:
private string toArabicNumber(string input)
{
var arabic = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
for (int j = 0; j < arabic.Length; j++)
{
input = input.Replace(j.ToString(), arabic[j]);
}
return input;
}
或其他解决方案:
private string ConvertNumber(string englishNumber)
{
string theResult = "";
foreach (char ch in englishNumber)
{
theResult += (char)(1776 + char.GetNumericValue(ch));
}
return theResult;
}
也许看看 .net 中的全球化,将 exe 的语言设置为阿拉伯语(默认情况下)或在启动时它可能会自行开始工作。
要强制使用阿拉伯语,您可以使用:
yourNumber.ToString("N2", CultureInfo.GetCultureInfo("ar-SA"));
没有这样的方法,但是我们可以实现;让我们尽可能地概括任务:
Given a string source
and CultureInfo culture
, turn all digits
within source
into national digits if culture
provides them
代码:
using System.Globalization;
using System.Linq;
...
public static partial class StringExtensions {
public static String ConvertNumerals(this string source,
CultureInfo culture = null) {
if (null == source)
return null;
if (null == culture)
culture = CultureInfo.CurrentCulture;
string[] digits = culture.NumberFormat.NativeDigits.Length >= 10
? culture.NumberFormat.NativeDigits
: CultureInfo.InvariantCulture.NumberFormat.NativeDigits;
return string.Concat(source
.Select(c => char.IsDigit(c)
? digits[(int) (char.GetNumericValue(c) + 0.5)]
: c.ToString()));
}
}
演示:
// "ar-SA" is "arabic Saudi Arabia"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("ar-SA")));
// "en-US" is "english United States"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("en-US")));
结果:
test ١٢٣
test 123
有谁知道如何将 英语 数字如 196
转换为 阿拉伯语 形式如 ١٩٦
在 .Net 核心 C# 中。
foreach (DataRow dr in ds.Tables[0].Rows)
{
lstSurahs.Add(new Quran
{
ID = Convert.ToInt32(dr["ID"].ToString()),
DatabaseID = Convert.ToInt32(dr["DatabaseID"].ToString()),
SuraID = Convert.ToInt32(dr["SuraID"].ToString()),
// Need Arabic Form
VerseID = Convert.ToInt32(dr["VerseID"].ToString().ConvertNumerals()),
AyahText = dr["AyahText"].ToString()
});
}
以下方法应该如您所愿:
private string toArabicNumber(string input)
{
var arabic = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
for (int j = 0; j < arabic.Length; j++)
{
input = input.Replace(j.ToString(), arabic[j]);
}
return input;
}
或其他解决方案:
private string ConvertNumber(string englishNumber)
{
string theResult = "";
foreach (char ch in englishNumber)
{
theResult += (char)(1776 + char.GetNumericValue(ch));
}
return theResult;
}
也许看看 .net 中的全球化,将 exe 的语言设置为阿拉伯语(默认情况下)或在启动时它可能会自行开始工作。
要强制使用阿拉伯语,您可以使用: yourNumber.ToString("N2", CultureInfo.GetCultureInfo("ar-SA"));
没有这样的方法,但是我们可以实现;让我们尽可能地概括任务:
Given a
string source
andCultureInfo culture
, turn all digits withinsource
into national digits ifculture
provides them
代码:
using System.Globalization;
using System.Linq;
...
public static partial class StringExtensions {
public static String ConvertNumerals(this string source,
CultureInfo culture = null) {
if (null == source)
return null;
if (null == culture)
culture = CultureInfo.CurrentCulture;
string[] digits = culture.NumberFormat.NativeDigits.Length >= 10
? culture.NumberFormat.NativeDigits
: CultureInfo.InvariantCulture.NumberFormat.NativeDigits;
return string.Concat(source
.Select(c => char.IsDigit(c)
? digits[(int) (char.GetNumericValue(c) + 0.5)]
: c.ToString()));
}
}
演示:
// "ar-SA" is "arabic Saudi Arabia"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("ar-SA")));
// "en-US" is "english United States"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("en-US")));
结果:
test ١٢٣
test 123