using System.Globalization;
public static void Main()
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign | NumberStyles.AllowThousands;
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
Console.WriteLine(valore.ToString() + " - " + tryValoreNumerico(valore.ToString(), out n));
public static bool tryValoreNumerico(object valore, out decimal valoreRestituito)
string testoNormalizzato;
if (valore.ToString().Contains(",") && valore.ToString().Contains("."))
if (valore.ToString().IndexOf(".") < valore.ToString().IndexOf(","))
testoNormalizzato = valore.ToString().Replace(".", "");
testoNormalizzato = valore.ToString().Replace(",", "");
if ((valore.ToString().Length - valore.ToString().Replace(",", "").Length) > 1)
string[] pezzi = valore.ToString().Split(',');
for (int i = 1; i < pezzi.Length; i++ )
if (pezzi[i].Length != 3)
testoNormalizzato = valore.ToString().Replace(",", "");
else if ((valore.ToString().Length - valore.ToString().Replace(".", "").Length) > 1)
string[] pezzi = valore.ToString().Split('.');
for (int i = 1; i < pezzi.Length; i++)
if (pezzi[i].Length != 3)
testoNormalizzato = valore.ToString().Replace(".", "");
testoNormalizzato = valore.ToString();
testoNormalizzato = testoNormalizzato.Replace(",", ".");
if (decimal.TryParse(testoNormalizzato, out n) && testoNormalizzato == Convert.ToDecimal(testoNormalizzato, new CultureInfo("en-US")).ToString().Replace(",", "."))
valoreRestituito = Convert.ToDecimal(testoNormalizzato, new CultureInfo("en-US"));
return decimal.TryParse(testoNormalizzato, out n) && testoNormalizzato == Convert.ToDecimal(testoNormalizzato, new CultureInfo("en-US")).ToString().Replace(",", ".");