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

在Visual Studio中使用C#实现双精度浮点数相加结果异常的求助

解决C#中double数字相加时小数点分隔符导致的错误

这个问题我太熟了!本质是区域文化设置在搞鬼~

你遇到的情况是因为你的系统当前区域配置把**逗号(,)**作为小数点分隔符,而不是点(.):

  • 当输入2.4时,Convert.ToDouble会把点当成千位分隔符直接忽略,所以2.4被解析成了24,4.5被解析成45,加起来自然是69;
  • 当输入2,4时,刚好匹配系统区域的小数点分隔符,所以能正确解析为2.4和4.5,相加得到6.9。

解决方案

这里给你两种靠谱的处理方式:

1. 使用不变文化(InvariantCulture)强制解析点作为小数点

不管系统区域是什么,InvariantCulture都会把点(.)当作小数点分隔符,适合做通用程序。

修改后的代码如下(记得引用System.Globalization命名空间):

using System;
using System.Globalization;

namespace DoubleAdditionFix
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter a number: ");
            double num1 = Convert.ToDouble(Console.ReadLine(), CultureInfo.InvariantCulture);
            
            Console.Write("Enter another number: ");
            double num2 = Convert.ToDouble(Console.ReadLine(), CultureInfo.InvariantCulture);
            
            Console.WriteLine(num1 + num2);
            Console.ReadLine();
        }
    }
}

2. 用double.TryParse做更安全的解析(推荐)

TryParse可以避免输入无效格式时程序崩溃,还能友好提示用户重新输入:

using System;
using System.Globalization;

namespace DoubleAdditionFix
{
    class Program
    {
        static void Main(string[] args)
        {
            double num1;
            Console.Write("Enter a number (use . as decimal separator): ");
            // 循环直到输入有效数字
            while (!double.TryParse(Console.ReadLine(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out num1))
            {
                Console.WriteLine("Invalid input! Please enter a valid number with . as decimal separator.");
                Console.Write("Try again: ");
            }

            double num2;
            Console.Write("Enter another number (use . as decimal separator): ");
            while (!double.TryParse(Console.ReadLine(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out num2))
            {
                Console.WriteLine("Invalid input! Please enter a valid number with . as decimal separator.");
                Console.Write("Try again: ");
            }

            Console.WriteLine($"Result: {num1 + num2}");
            Console.ReadLine();
        }
    }
}

额外说明

如果你的程序是给特定区域用户使用(比如只面向使用逗号做小数点的地区),也可以指定对应区域的CultureInfo(比如new CultureInfo("fr-FR")代表法语区),但通用场景下优先用InvariantCulture。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:47:38