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

Converting a number from a string to an int with decimals separated by comma or dot

我有一个包含数字的字符串。它可以是带小数点的一个,后跟一个逗号或一个点,具体取决于用户的区域设置。

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

可能是我,但是我不知道如何在小数点之间用逗号分隔的情况下将这个数字正确地转换成具有相应值的int。我试过这个:

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 吗?我不想在字符串中用 . 替换 ,,因为那看起来太脏了。

我该怎么做?

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

因此,您必须将所有逗号替换为点,反之亦然。然后使用 'dot separator culture' 或 'comma separator culture' 设置进行解析。

也许最安全的做法是尝试使用两种文化解析输入,如下所示:

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);
  }
}