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)
以下是编译器的图片:
有谁知道我该如何解决这个问题?我已经重新安装了 Visual Studio,但它没有修复它。
解决方案
问题是您的 PC 有一个语言/文化(区域设置)设置,它使用点 ( .
) 作为数字分隔符而不是小数点(并且可能是小数点的逗号)。也就是说,100 万将被写为1.000.000
,并且(近似)π 将是3,14159
。在这种文化中,输入点实际上被忽略了,因此62.3
被读作623
.
我不确定您所说的“不能使用逗号”是什么意思(否则,输入62,3
和15,1
用于非整数输入值应该可以工作);但是,您可以通过两种方式解决此问题:
更改计算机的语言/地区设置;如果您使用的是 Windows 10,则可以从“控制面板”->“时钟和区域”中选择一种使用“预期”小数点的语言(如英语)。
您可以以编程方式更改语言环境。创建一种使用
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 - C 将结构数组的成员指向另一个数组(没有重复的结构数据只是指向它)
- postgresql - 初始化 postgres 数据库(不使用 /docker-entrypoint-initdb.d)
- python - Pandas 在另一个表的范围内查找值
- javascript - How to Sense case and writing in HTML input
- swift - sequence() 上的 compactMap 不懒惰?
- html - 为什么我的文本是连接的,发生这种情况时它叫什么?
- c - 我的程序无法正确调整图像大小时遇到问题
- python - 如何从列表中的列表中删除项目?
- javascript - UPNG.js - 我如何处理透明图像?
- python - 为什么 p[:] 在这两种情况下的工作方式不同?