ng8*_*92b 18 c# decimal tryparse regional-settings
问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。
string str = "2,5";
当你decimal.TryParse(str, out somevariable);它时会发生什么?
somevariable 将假设为 0。
你能做些什么来解决它?
1-你可以
decimal.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out somevariable);
Run Code Online (Sandbox Code Playgroud)
它会返回 25,而不是 2.5,这是错误的。
2-你可以
decimal.TryParse(str.Replace(",","."), out num);
Run Code Online (Sandbox Code Playgroud)
它会返回正确的值,但是,如果用户","用作小数点分隔符,它将不起作用。
我无法使其工作的可能解决方案:
在区域设置中获取用户小数点分隔符:
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
Run Code Online (Sandbox Code Playgroud)
并以某种方式替换 from ",",sepdec,这样如果它是逗号,它将保留一个逗号,如果用户使用点,则用实际的点替换。
提示?
编辑:很多网友发帖有用的信息,最近,使用参数NumberStyles.Any, CultureInfo.GetCultureInfo("pt-PT")上tryParse是行不通的,如果你的分隔符设置为“”所以它几乎犯规作出的TryParse‘通用’的fullfill前提。
我会解决这个问题,如果有人有更多提示,欢迎
小智 7
我知道该线程有点旧,但我尝试提供答案。
我使用正则表达式来确定字符串中使用的数字格式。正则表达式还匹配没有小数分隔符的数字(“12345”)。
var numberString = "1,234.56"; // en
// var numberString = "1.234,56"; // de
var cultureInfo = CultureInfo.InvariantCulture;
// if the first regex matches, the number string is in us culture
if (Regex.IsMatch(numberString, @"^(:?[\d,]+\.)*\d+$"))
{
cultureInfo = new CultureInfo("en-US");
}
// if the second regex matches, the number string is in de culture
else if (Regex.IsMatch(numberString, @"^(:?[\d.]+,)*\d+$"))
{
cultureInfo = new CultureInfo("de-DE");
}
NumberStyles styles = NumberStyles.Number;
bool isDouble = double.TryParse(numberString, styles, cultureInfo, out number);
Run Code Online (Sandbox Code Playgroud)
HTH
托马斯
我找到了一个解决方案,我是这个区域和逗号主题的初学者,所以如果您有意见来提高对此的理解,请欢迎。
我们首先获取用户在其外部区域选项中设置的小数分隔符Form{InitializeComponent();}(我想要一个通用变量,它允许我更正代码)
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
Run Code Online (Sandbox Code Playgroud)
在tryParse, 为了使其表现普遍,我们将读取字符串中的点和逗号,并将它们转换为我们定义为的小数分隔符sepdec
decimal.TryParse(str.Replace(",",sepdec.ToString()).Replace(".",sepdec.ToString()), out somevariable);
Run Code Online (Sandbox Code Playgroud)
我希望这对您有所帮助,请评论改进建议!
| 归档时间: |
|
| 查看次数: |
17069 次 |
| 最近记录: |