问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。
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前提。
我会解决这个问题,如果有人有更多提示,欢迎