You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:18:23