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

Visual Studio C# .NET 5.0控制台应用转换小数丢失小数点如何解决

修复方案

该问题由系统区域文化配置导致,和Visual Studio安装状态无关。Convert.ToDecimal默认会读取当前线程绑定的系统文化规则解析数字:如果你的系统默认小数分隔符为逗号,、数字千位分隔符为点.,输入的62.5会被识别为千位分隔符直接过滤,最终得到625。在线编译器默认使用不随系统变化的固定文化(Invariant Culture),因此运行结果符合预期。

你可以按优先级选择以下任意一种方案修复:

  • 方案1:单处解析指定固定文化
    将原有Convert.ToDecimal替换为显式指定不变文化的decimal.Parse,示例代码如下:
    // 替换原来的Convert.ToDecimal行
    input_1 = decimal.Parse(input_1_b, System.Globalization.CultureInfo.InvariantCulture);
    input_2 = decimal.Parse(input_2_b, System.Globalization.CultureInfo.InvariantCulture);
    input_3 = decimal.Parse(input_3_b, System.Globalization.CultureInfo.InvariantCulture);
    
    该方案仅修改当前的数字解析逻辑,不影响程序其他功能的文化适配。
  • 方案2:全局修改程序默认文化
    在Main方法入口最上方添加两行代码,全局指定所有类型转换默认使用不变文化:
    static void Main(string[] args)
    {
        // 新增以下两行
        System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
        System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.InvariantCulture;
    
        // 原有代码不需要改动
        string input_1_b;
        // ...其余原有代码
    }
    
    该方案无需修改原有转换逻辑,全局生效,适用于所有程序内数字、日期解析都要和在线编译器行为一致的场景。
  • 方案3:修改系统级区域配置
    打开Windows控制面板→区域→其他设置,将小数分隔符修改为.、数字分组符号修改为,,保存配置后重启Visual Studio即可生效。该方案会影响所有本地运行的程序的数字、日期解析规则。

内容的提问来源于stack exchange,提问作者Mical -

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:00