C# 将数字从字符串转换为整数,小数由逗号或点分隔
我有一个包含数字的字符串。它可以是一个带小数的数字,后跟逗号或点,具体取决于用户的区域设置 这些数字实际上是百分之一百,我想把它们转换成普通的整数。例如,我希望字符串C# 将数字从字符串转换为整数,小数由逗号或点分隔,c#,.net,xaml,numbers,locale,C#,.net,Xaml,Numbers,Locale,我有一个包含数字的字符串。它可以是一个带小数的数字,后跟逗号或点,具体取决于用户的区域设置 这些数字实际上是百分之一百,我想把它们转换成普通的整数。例如,我希望字符串“14.5”和“145000”以int1450结尾 可能是我,但当小数被逗号分隔时,我不知道如何正确地将这个数字转换成具有相应值的int。我试过这个: double-valueDouble; double.TryParse(SpecificTemperatureTextBox.Text,NumberStyles.Any, Cultu
“14.5”
和“145000”
以int1450
结尾
可能是我,但当小数被逗号分隔时,我不知道如何正确地将这个数字转换成具有相应值的int。我试过这个:
double-valueDouble;
double.TryParse(SpecificTemperatureTextBox.Text,NumberStyles.Any,
CultureInfo.CurrentCulture,out valueDouble);
int-valueInt=Convert.ToInt32(valueDouble*100);
但这有时是错误的。以下是我的结果:
转换时是否未正确使用?我不想将字符串中的,
替换为
,因为这看起来太脏了
如何执行此操作?使用CurrentCulture将根据CurrentCulture的值正确解析带点或逗号的数字。但并不是同时使用,因为在没有文化的情况下,点和逗号是可互换的
因此,您必须将点替换为所有逗号,反之亦然。然后使用“点分隔符区域性”或“逗号分隔符区域性”设置进行解析。最安全的方法可能是尝试使用两种区域性解析输入,如下所示:
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);
}
}
您需要知道(并使用)用户的区域设置。或者写一些检测逻辑。只有1个TryParse()没有解决方案。如果它取决于用户的区域设置,您将无法同时测试这两项工作(如在测试中)。@HenkHolterman我认为
CultureInfo.CurrentCulture
的参数中的TryParse
将处理meIt的情况,因此您的解决方案(可能)可以工作。但是,您不能同时测试这两个字符,您必须使用不同的区域设置进行测试。如果您可以安全地假设除了
和,
之外,没有其他十进制分隔符,那么这可能也行得通,尽管是一个丑陋的解决方案:int-valueInt=Convert.ToInt32(SpecificTemperatureTextBox.Text.Replace(.“,”).Replace(“,”).Replace(,”.PadRight(5,'0')代码>和担心12500.00对12500.00的问题没有提到数千的分隔符,只是小数部分分隔符。但即使使用了数千的分隔符,也只需除去最后一个点或逗号即可。绝对棒极了,这正是有效的方法。我最终使用了CultureInfo.CurrentCulture
,这显然取决于区域设置(为Windows Phone 8.1和.NET 4.5开发)
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);
}
}