首页 > 解决方案 > Visual Studio 编译器错误(不能使用逗号)

问题描述

我在使用 C# 的 Visual Studio 时遇到问题。我正在使用 .NET 5.0(当前)创建控制台应用程序。

每当我编译我的程序并输入十进制数字时(例如:62.5,它会将其保存为 625)。我该如何解决?

这是我一直在使用的代码(它也不会在所有其他程序上保存逗号)。该程序选择 3 个输入中最大的一个

using System;

namespace OEFGREATEST
{
    class Program
    {
        static void Main(string[] args)
        {
            string input_1_b;
            string input_2_b;
            string input_3_b;

            decimal input_1;
            decimal input_2;
            decimal input_3;

            input_1_b = Console.ReadLine();
            input_2_b = Console.ReadLine();
            input_3_b = Console.ReadLine();

            input_1 = Convert.ToDecimal(input_1_b);
            input_2 = Convert.ToDecimal(input_2_b);
            input_3 = Convert.ToDecimal(input_3_b);
            decimal output_1 = Math.Max(input_1, input_2);
            decimal output_2 = Math.Max(output_1, input_3);

            Console.WriteLine(output_2);
        }
    }
}

我在使用完全相同的程序时一直在使用在线编译器,它可以正常保存十进制数(例如 62.5 保存为 62.5)

以下是编译器的图片:

在线编译器(工作正常)

编译器 Visual Studio(不能正常工作)

有谁知道我该如何解决这个问题?我已经重新安装了 Visual Studio,但它没有修复它。

标签: c#visual-studio

解决方案


问题是您的 PC 有一个语言/文化(区域设置)设置,它使用点 ( .) 作为数字分隔符而不是小数点(并且可能是小数点的逗号)。也就是说,100 万将被写为1.000.000,并且(近似)π 将是3,14159。在这种文化中,输入点实际上被忽略了,因此62.3被读作623.

我不确定您所说的“不能使用逗号”是什么意思(否则,输入62,315,1用于非整数输入值应该可以工作);但是,您可以通过两种方式解决此问题:

  1. 更改计算机的语言/地区设置;如果您使用的是 Windows 10,则可以从“控制面板”->“时钟和区域”中选择一种使用“预期”小数点的语言(如英语)。

  2. 您可以以编程方式更改语言环境。创建一种使用dot小数点的区域性(如“en-US”)并将其作为第二个参数传递给ToDecimal调用。这是执行此操作的代码的修改版本:

using System;
using System.Globalization; // For the CultureInfo class

namespace OEFGREATEST
{
    class Program
    {
        static void Main(string[] args)
        {
            string input_1_b;
            string input_2_b;
            string input_3_b;

            decimal input_1;
            decimal input_2;
            decimal input_3;

            input_1_b = Console.ReadLine();
            input_2_b = Console.ReadLine();
            input_3_b = Console.ReadLine();

            // Create an English/US culture and pass that to the ToDecimal calls ...
            CultureInfo CI = new CultureInfo("en-US", false);
            input_1 = Convert.ToDecimal(input_1_b, CI);
            input_2 = Convert.ToDecimal(input_2_b, CI);
            input_3 = Convert.ToDecimal(input_3_b, CI);
            decimal output_1 = Math.Max(input_1, input_2);
            decimal output_2 = Math.Max(output_1, input_3);

            Console.WriteLine(output_2);

        }
    }
}

请注意,就目前而言,上述内容不会更改用于任何输出值的语言环境;因此,如果您最大的输入是456.7,它将显示为456,7(使用系统默认语言环境)。您可以通过在执行任何输出之前添加如下一行来更改此设置(使用相同的CultureInfo对象CI):

Thread.CurrentThread.CurrentCulture = CI; // Use this line to change the UI locale

(要使用上面的代码,您还需要在using System.Threading;源文件顶部附近添加一行。)


推荐阅读