【问题标题】:System.FormatException - Visual Studio Mac vs PC [duplicate]System.FormatException - Visual Studio Mac 与 PC [重复]
【发布时间】:2021-03-17 11:24:05
【问题描述】:

我是一个完整的初学者,正在努力学习。

下面的代码编译得很好,在我的 Mac 版本的 Visual Studio Community 上没有任何异常。

但是,在 PC 版本中,“measurements[i] = Convert.ToDouble(Console.ReadLine());”导致“System.FormatException 错误”

我想了解一下,我认为mac版本处理异常的方式有什么不同?

mac 和 PC 项目都是 .NET 3.1 控制台应用程序。

        double[] measurements = new double[3];

        for(int i = 0; i < measurements.Length; i++)
        {
            Console.Write("Input a decimal number: ");

            measurements[i] = Convert.ToDouble(Console.ReadLine());
        }

【问题讨论】:

  • 你说的是运行时异常还是编译时异常?运行时是在您运行应用程序时引发异常,编译时是在您构建应用程序时。
  • 您为Console.ReadLine() 输入的具体字符串是什么? Convert.ToDouble() 默认进行本地化解析,可能您在每台计算机上都有不同的数字本地化。请参阅:Decimal Point ignored in Convert.ToDouble

标签: c# windows macos visual-studio exception


【解决方案1】:

基于例外,我猜不同的机器(mac 和 windows)有不同的文化配置(小数点逗号与句点或其他)。

为了具有与文化无关的行为,我建议使用强制不变的文化(句点作为小数分隔符)将给定的字符串解析为 double

var measurements = new double[3];

for(int i = 0; i < measurements.Length; i++)
{
    Console.Write("Input a decimal number: ");
    var value = Console.ReadLine();  // 42.99

    measurements[i] = double.Parse(value, CultureInfo.InvariantCulture);
}

【讨论】:

  • 成功了,非常感谢您的精彩回答!
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 2013-03-31
  • 2017-10-11
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多