J'écris un système bancaire et mon client veut soutenir les normes numériques russes et américaines dans le délimiteur de nombres décimaux. Respectivement .
et ,
.Analyser les deux symboles. et, comme les nombres décimaux délimitent dans ASP.NET
Maintenant seulement ,
fonctionne correctement. Peut-être à cause du format OS du serveur web (le russe est défini).
cordes comme 2000.00
lance une FormatException
:
chaîne d'entrée était pas dans un format correct.
Comment réparer cela? J'ai deux idées:
protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
txtAmount.Text = txtAmount.Text.Replace('.', ',');
}
ou
protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
var ru = new CultureInfo("ru-RU");
var en = new CultureInfo("en-US")
decimal d;
var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
if (!Decimal.TryParse(value, NumberStyles.Any, ru, out d)
&& Decimal.TryParse(value, NumberStyles.Any, en, out d)
{
// data isn't in Russian format but is in American
txtAmount.Text = d.ToString(ru);
}
}
Y at-il d'autres idées?
Voulez-vous vraiment analyser à la fois dans le même contexte? Qu'en est-il des choses comme "£ 2,000,000.45"? –
@ SK-logic: aucun signe de devise par spécification. Mais à propos des deux symboles dans une chaîne d'entrée, je dois penser plus. C'est très rare mais toujours possible. Je pense que ma deuxième variante (et la réponse d'Alex) est l'approche la plus appropriée. – abatishchev