将数字从字符串转换为整数,其中小数由逗号或点分隔
本文关键字:小数 分隔 点分 字符串 数字 转换 整数 | 更新日期: 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的值正确解析带有点或逗号的数字。但不能同时使用,因为在任何文化中,点和逗号都不能互换。
因此,您必须将所有逗号替换为点,反之亦然。然后使用"点分隔符区域性"或"逗号分隔符区域性"设置进行解析。