将数字从字符串转换为整数,其中小数由逗号或点分隔

本文关键字:小数 分隔 点分 字符串 数字 转换 整数 | 更新日期: 2023-09-27 17:50:45

我有一个包含数字的字符串。它可以是带有小数,后面跟着逗号或点,具体取决于用户的语言环境。

这些数字实际上是百分之一,我想把它们转换成普通的int型。例如,我希望字符串"14.5""14,5000"以int 1450结束。

可能是我,但我不知道如何正确地将这个数字转换为具有相应值的整数,当小数用逗号分隔时。我试过了:

double valueDouble;
double.TryParse(SpecificTemperatureTextBox.Text, NumberStyles.Any,
    CultureInfo.CurrentCulture, out valueDouble);
int valueInt = Convert.ToInt32(valueDouble * 100);

但这有时会出错。以下是我的结果:

TextBox value     Expected result     Converted result
"14"              1400                1400 (good)
"14.0"            1400                1400 (good)
"14.5"            1450                1450 (good)
"14,0"            1400                14000
"14,5"            1450                14500

当我转换时,我没有正确使用System.Globalization吗?我不想用字符串中的.替换,,因为那看起来太脏了。

我该怎么做?

将数字从字符串转换为整数,其中小数由逗号或点分隔

也许最安全的方法是尝试用两种文化来解析输入,就像这样:

private static int ConvertStringValue(string value)
{
  decimal valDouble;
  var comma = (NumberFormatInfo)CultureInfo.InstalledUICulture.NumberFormat.Clone();
  comma.NumberDecimalSeparator = ",";
  comma.NumberGroupSeparator = ".";
  var dot = (NumberFormatInfo)CultureInfo.InstalledUICulture.NumberFormat.Clone();
  dot.NumberDecimalSeparator = ".";
  dot.NumberGroupSeparator = ".";
  if (decimal.TryParse(value, NumberStyles.Currency, comma, out valDouble))
  {
    return Convert.ToInt32(valDouble * 100); 
  }
  else if (decimal.TryParse(value, NumberStyles.Currency, dot, out valDouble))
  {
    return Convert.ToInt32(valDouble * 100);
  }
  else
  {
    return Convert.ToInt32(value);
  }
}

使用CurrentCulture将根据CurrentCulture的值正确解析带有点或逗号的数字。但不能同时使用,因为在任何文化中,点和逗号都不能互换。

因此,您必须将所有逗号替换为点,反之亦然。然后使用"点分隔符区域性"或"逗号分隔符区域性"设置进行解析。