Je développe un programme dans la langue marathi. En cela, je souhaite ajouter / valider des chiffres entrés dans Marathi Unicode en obtenant sa valeur entière réelle. P>
Par exemple, à Marathi: P>
Comment convertir cette chaîne de marathi J'ai beaucoup googlé, mais je n'ai trouvé rien d'utile. J'ai essayé d'utiliser "45" code> à sa valeur entière réelle I.e.
45 code>? p>
system.text.encoding.unicode.getstring () code> pour obtenir une chaîne puis a essayé d'analyser, mais a échoué ici aussi. P>
4 Réponses :
Correc correct serait d'utiliser Char.getnumericValue qui vous permet de convertir des caractères individuels en valeurs numériques correspondantes et que la construction de la valeur complète. C'est à dire. Selon votre objectif, il peut être plus facile de remplacer chaque caractère du chiffre national avec le chiffre invariant correspondant et utilisez des fonctions d'analyse régulières. p> char.genumericvalue ('¥ ¯') code> vous donne 9.
C'est la bonne réponse, mais il est décevant que vous devez aller si de faible niveau, qu'avec le soutien textuel étant si bon.
@Alexei Levenkov merci pour la solution, mais le code échoue lorsque la valeur est en format décimal (comme 123,321 = latin équivalent. 123.321) ..
Hack rapide de la réponse de @ Alexi.
public static double ParseValue(string value) { return double.Parse(string.Join("", value.Select(c => "+-.".Contains(c) ? "" + c: "" + char.GetNumericValue(c)).ToArray()), NumberFormatInfo.InvariantInfo); }
Qu'en est-il des nombres négatifs, par exemple "- 123.321" code>? ;)
Merci @Roger, mais lors de l'utilisation de votre code, il me donne des erreurs suivantes 1. La meilleure méthode de la méthode surchargée pour 'String.join (String, String [])' a quelques arguments non valides 2. Impossible de convertir de 'System.collections.Generic. IEnumerable
Ok, corrigé le problème (existe seulement dans Pre .NET 4.0) afin de fonctionner correctement maintenant
J'ai trouvé ma solution ...
Le code suivant sera converti sur le numéro Marathi à son numéro latin équivalent ..
Merci à @Alexei, je viens de modifier une partie de votre code et son bien fonctionnel ..
string ToLatinDigits(string nativeDigits) { int n = nativeDigits.Length; StringBuilder latinDigits = new StringBuilder(capacity: n); for (int i = 0; i < n; ++i) { if (char.IsDigit(nativeDigits, i)) { latinDigits.Append(char.GetNumericValue(nativeDigits, i)); } else if (nativeDigits[i].Equals('.') || nativeDigits[i].Equals('+') || nativeDigits[i].Equals('-')) { latinDigits.Append(nativeDigits[i]); } else { throw new Exception("Invalid Argument"); } } return latinDigits.ToString(); }
Windows.globalisation. Decimalformatter va analyser différent Systèmes numériques dans ajout au latin, y compris Devanagari (ce qui est utilisé par Marathi). P>
Ressemble à un duplicata de Stackoverflow.com/Questtions/7826162/... .
Y a-t-il une logique où vous pouvez mapper des caractères vers des entiers, puis calculer à partir de là? Quelque chose comme Ansing Numéros romains
Fyi,
int.parse () code> n'est probablement pas fonctionner dans ce cas, puisque la documentation pour
NumberFormatinfo.natigégits code>
dit: " Le jeu de caractères spécifié par leNativentigits Code> La propriété n'a aucun effet sur les opérations d'analyse ou de mise en forme. Seuls les chiffres latins de base
0 code> (U + 0030) via
9 code> (U + 0039) sont utilisés lors de la mise en forme ou de l'analyse valeurs numériques ou valeurs de date et d'heure. " i>
@Guruprasad - Vous devez accepter la réponse plutôt que de mettre {résolu} dans le titre.