Visual Studio 编译器错误(不能使用逗号)

麦克风 -

我的 Visual Studio 使用 C# 时遇到问题。我正在使用 .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,但它没有修复它。

阿德里安鼹鼠

问题在于您的 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;在源文件顶部附近添加一行。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章