c# - para - numeros grandes en ingles
¿Cómo convertir dígitos persas en variables a dígitos en inglés usando la cultura? (11)
Aquí mi código convierte los dígitos persas en variable al inglés, por método de extensión (se puede usar con un punto después de su expresión)
private static readonly string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
private static readonly string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
public static string ToEnglishNumber(this string strNum)
{
string chash = strNum;
for (int i = 0; i < 10; i++)
chash = chash.Replace(pn[i], en[i]);
return chash;
}
public static string ToEnglishNumber(this int intNum)
{
string chash = intNum.ToString();
for (int i = 0; i < 10; i++)
chash = chash.Replace(pn[i], en[i]);
return chash;
}
y cuando quieras usar este código tienes que escribir: txt1.Value.ToEnglishNumber ();
Quiero cambiar los números persas que se guardan en una variable como esta:
string Value="۱۰۳۶۷۵۱";
a
string Value="1036751";
¿Cómo puedo usar una manera fácil como la información de la cultura para hacer esto por favor?
mi código de muestra es:
List<string> NERKHCOlist = new List<string>();
NERKHCOlist = ScrappingFunction(NERKHCO, NERKHCOlist);
int NERKHCO_Price = int.Parse(NERKHCOlist[0]);//NERKHCOlist[0]=۱۰۳۶۷۵۱
<= Por lo que no se puede analizar a int
Y esto está en mi función que vuelve a una lista con dígitos persas dentro de los elementos de la lista
protected List<string> ScrappingFunction(string SiteAddress, List<string> NodesList)
{
string Price = "null";
List<string> Targets = new List<string>();
foreach (var path in NodesList)
{
HtmlNode node = document.DocumentNode.SelectSingleNode(path.ToString());//recognizing Target Node
Price = node.InnerHtml;//put text of target node in variable(PERSIAN DIGITS)
Targets.Add(Price);
}
return Targets;
}
Debe analizarlos primero, utilizando, por ejemplo, Int32.Parse () con el especificador cultural correcto. Una vez que lo tiene como un entero llano, es simplemente una cuestión de llamar a ToString (), nuevamente con el especificador cultural correcto.
Una solución alternativa es recorrer la cadena de caracteres por carácter y simplemente reemplazar cualquier carácter que sea un dígito persa con el número árabe correspondiente (oeste) . Otros caracteres se pueden conservar tal como están, si es necesario.
Si la cadena realmente contiene un número , debe ir con el método de análisis de enteros. Si no es solo un número, sino realmente un número de teléfono, un número de serie, etc., es posible que deba usar el algoritmo de reemplazo.
Escribí este método de extensión para convertir dígitos árabes y persas en una cadena a su representación latina
public static class Extensions
{
public static string ConvertDigitsToLatin(this string s)
{
var sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
switch (s[i])
{
//Persian digits
case ''/u06f0'':
sb.Append(''0'');
break;
case ''/u06f1'':
sb.Append(''1'');
break;
case ''/u06f2'':
sb.Append(''2'');
break;
case ''/u06f3'':
sb.Append(''3'');
break;
case ''/u06f4'':
sb.Append(''4'');
break;
case ''/u06f5'':
sb.Append(''5'');
break;
case ''/u06f6'':
sb.Append(''6'');
break;
case ''/u06f7'':
sb.Append(''7'');
break;
case ''/u06f8'':
sb.Append(''8'');
break;
case ''/u06f9'':
sb.Append(''9'');
break;
//Arabic digits
case ''/u0660'':
sb.Append(''0'');
break;
case ''/u0661'':
sb.Append(''1'');
break;
case ''/u0662'':
sb.Append(''2'');
break;
case ''/u0663'':
sb.Append(''3'');
break;
case ''/u0664'':
sb.Append(''4'');
break;
case ''/u0665'':
sb.Append(''5'');
break;
case ''/u0666'':
sb.Append(''6'');
break;
case ''/u0667'':
sb.Append(''7'');
break;
case ''/u0668'':
sb.Append(''8'');
break;
case ''/u0669'':
sb.Append(''9'');
break;
default:
sb.Append(s[i]);
break;
}
}
return sb.ToString();
}
}
La solución de Saeed está bien, pero para las variables dobles también debe reemplazar "٫" Personaje para "." , Para que puedas usar:
private string ToEnglishNumber(string strNum)
{
string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "٫" };
string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","." };
string chash = strNum;
for (int i = 0; i < 11; i++)
chash = chash.Replace(pn[i], en[i]);
return chash;
}
Puede usar la clase Windows.Globalization.NumberFormatting.DecimalFormatter para analizar la cadena. Esto analizará las cadenas en cualquiera de los sistemas de numeración admitidos (siempre que sea internamente coherente).
Puedes convertirlos manualmente como tal
char[][] numbers = new char[][]
{
"0123456789".ToCharArray(),"persian numbers 0-9 here".ToCharArray()
};
public void Convert(string problem)
{
for (int x = 0; x <= 9; x++)
{
problem.Replace(numbers[0][x], numbers[1][x]);
}
}
No sé los números persas, por lo que tendrá que agregarlos a la matriz char.
Simplemente use el siguiente código:
private string toPersianNumber(string input)
{
string[] persian = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
for (int j=0; j<persian.Length; j++)
input = input.Replace(persian[j], j.ToString());
return input;
}
USO de la cultura Para convertir el número de cualquier idioma a cualquier idioma
Funciones:
public static string ConvertDigitChar(this string str, CultureInfo source, CultureInfo destination)
{
for (int i = 0; i <= 9; i++)
{
str = str.Replace(source.NumberFormat.NativeDigits[i], destination.NumberFormat.NativeDigits[i]);
}
return str;
}
public static string ConvertDigitChar(this int digit, CultureInfo destination)
{
string res = digit.ToString();
for (int i = 0; i <= 9; i++)
{
res = res.Replace(i.ToString(), destination.NumberFormat.NativeDigits[i]);
}
return res;
}
Cómo utilizar las funciones:
var fa = CultureInfo.GetCultureInfoByIetfLanguageTag("fa");
var en = CultureInfo.GetCultureInfoByIetfLanguageTag("en");
string str = "۰0۱1۲2۳3۴4۵5۶6۷7۸8۹9";
string r1 = str.ConvertDigitChar(en, fa);
string r2 = str.ConvertDigitChar(fa, en);
int i = 123456789;
string r3 = i.ConvertDigitChar(fa);
Resultado:
r1: "۰۰۱۱۲۲۳۳۴۴۵۵۶۶۷۷۸۸۹۹"
r2: "00112233445566778899"
r3: "۰۱۲۳۴۵۶۷۸۹"
public static string ChangeNumberToEnglishNumber(string value)
{
string result=string.Empty;
foreach (char ch in value)
{
try
{
double convertedChar = char.GetNumericValue(ch);
if (convertedChar >= 0 && convertedChar <= 9)
{
result += convertedChar.ToString(CultureInfo.InvariantCulture);
}
else
{
result += ch;
}
}
catch (Exception e)
{
result += ch;
}
}
return result;
}
string test = "۱۰۳۶۷۵۱";
string EnglishNumbers = "";
for (int i = 0; i < test.Length; i++)
{
EnglishNumbers += char.GetNumericValue(test, i);
}
int convertednumber = Convert.ToInt32(EnglishNumbers);
public static string ToEnglishNumber(string input)
{
var englishnumbers = new Dictionary<string, string>()
{
{"۰","0" }, {"۱","1" }, {"۲","2" }, {"۳","3" },{"۴","4" }, {"۵","5" },{"۶","6" }, {"۷","7" },{"۸","8" }, {"۹","9" },
{"٠","0" }, {"١","1" }, {"٢","2" }, {"٣","3" },{"٤","4" }, {"٥","5" },{"٦","6" }, {"٧","7" },{"٨","8" }, {"٩","9" },
};
foreach (var numbers in englishnumbers)
input = input.Replace(numbers.Key, numbers.Value);
return input;
}