【发布时间】:2015-05-26 04:18:41
【问题描述】:
我有一个包含数字的字符串。它可以是带小数的,后跟逗号或点,具体取决于用户的语言环境。
这些数字实际上是百分之一,我想将它们转换为普通的旧整数。例如,我希望字符串 "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 吗?我不想将字符串中的, 替换为.,因为那样看起来太脏了。
我该怎么做?
【问题讨论】:
-
您需要了解(并使用)用户的区域设置。或者写一些检测逻辑。只有 1 个 TryParse() 没有解决方案。
-
如果它取决于用户的语言环境,您将无法同时测试这两项工作(就像在您的测试中一样)。
-
@HenkHolterman 我认为
TryParse的参数中的CultureInfo.CurrentCulture会为我处理这个问题 -
确实如此,因此您的解决方案(可能)有效。但是,您不能同时测试两者,您必须使用不同的区域设置进行测试。
-
如果您可以放心地假设除了
.和,之外没有其他小数分隔符,那么这也可能有效 - 虽然解决方案很丑:int valueInt = Convert.ToInt32(SpecificTemperatureTextBox.Text.Replace(".", "").Replace(",", "").PadRight(5, '0'));
标签: c# .net xaml numbers locale