Torna al Thread
case ValueDataType.Double:
#region Double
NumberFormatInfo localNumberFormatInfo = NumberFormatInfo.CurrentInfo;
string currencyDecimalSeparator = localNumberFormatInfo.CurrencyDecimalSeparator;
string currencyGroupSeparator = localNumberFormatInfo.CurrencyGroupSeparator;
string regExpDouble = string.Empty;
if (currencyGroupSeparator[0] == '\x00a0')
currencyGroupSeparator = " ";
//if (digits.HasValue)
//{
StringBuilder sb = new StringBuilder();
sb.Append(@"^\s*([-\+])?(((\d+)\");
sb.Append(currencyGroupSeparator);
sb.Append(@")*)(\d+)");
if (!digits.HasValue)
sb.Append(@"(\" + currencyDecimalSeparator + @"(\d+))?");
else if (digits.Value > 0)
sb.Append(@"(\" + currencyDecimalSeparator + @"(\d{1," + digits.Value.ToString() + "}))?");
sb.Append(@"?\s*$");
regExpDouble = sb.ToString();
//}
//else
//{
// string[] textArray1 = new string[5]
// {
// @"^\s*([-\+])?(((\d+)\",
// currencyGroupSeparator,
// @")*)(\d+)",
// @"(\" + currencyDecimalSeparator + @"(\d*))?",
// @"?\s*$"
// };
// regExpDouble = string.Concat(textArray1);
//}
Match regMatch = Regex.Match(text, regExpDouble);
if (regMatch.Success)
{
StringBuilder strBuilder = new StringBuilder();
strBuilder.Append(regMatch.Groups[1]);
foreach (Capture regCapture in regMatch.Groups[4].Captures)
strBuilder.Append(regCapture.Value);
strBuilder.Append(regMatch.Groups[5]);
if (!digits.HasValue || (digits.Value > 0))
{
strBuilder.Append(".");
strBuilder.Append(regMatch.Groups[7].Value);
}
value = decimal.Parse(strBuilder.ToString(), CultureInfo.InvariantCulture);
}
#endregion
break;
}