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

标签 c# 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)

以下是编译器的图片:

The online compiler (works fine)

Compiler Visual Studio (does not work fine)

有人知道我该如何解决这个问题吗?我已经重新安装了 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; 行。)

关于c# - Visual Studio 编译器错误(不能使用逗号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69416454/

相关文章:

c# - xml序列化导致字段缺失

c# - 如何以 react 方式将字节分组到消息中

c++ - 在 CMD 中使用 CreateProcessWithTokenW 启动 CMD

c# - 如何在 Visual C# 中查找值是否在数组中

visual-studio - 如何在没有官方支持的情况下使用 Visual Studio 2015 构建 Qt 4.8.6?

c# - 将\"的字符串拆分成数组

c# - 使用反射获取结构中的结构

c# - 使用C#检查键值是否存在

c++ - GCC - 将宏用于函数属性时出现 "has initializer but incomplete type"错误

c++ - Visual Studio 调试器将 AVX 寄存器的上半部分设置为零