Windows 11下C#数字解析异常:double.TryParse在Win10正常Win11失效
解决Windows 11下fr-FR文化解析带空格千位分隔符的double失败问题
直接修改代码,明确指定所需的数字样式,替代
NumberStyles.Any:var frCulture = new CultureInfo("fr-FR"); var requiredStyles = NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite; bool isParsed = double.TryParse("12 000,12", requiredStyles, frCulture, out double result);该修改可让代码在Windows 11的.NET Framework 4.8和.NET 8环境下正常解析。
另一种更稳妥的方式是自定义
NumberFormatInfo,不受系统文化默认设置变化影响:var customNumberFormat = new NumberFormatInfo { NumberGroupSeparator = " ", NumberDecimalSeparator = "," }; bool isParsed = double.TryParse("12 000,12", NumberStyles.Any, customNumberFormat, out double result);
问题原因
Windows 10与Windows 11之间,.NET(包括.NET Framework 4.8和.NET 8)对fr-FR文化下NumberStyles.Any的解析逻辑做了严格化调整。NumberStyles.Any包含了AllowCurrencySymbol、AllowExponent等多种额外样式,Windows 11的解析器会严格检查这些样式对应的格式要求,而目标字符串并不满足这些额外样式的格式,因此解析失败。明确指定仅需的样式,或自定义格式信息,就能绕过这个兼容性问题。
内容的提问来源于stack exchange,提问作者Loïc Marchand
相关产品推荐
相关产品推荐

