You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入带逗号的小数触发System.FormatException错误的技术问询

问题解决:输入带逗号的小数时抛出FormatException错误

问题现象

输入整数(如3、4、6)时程序运行正常,但输入带逗号的小数(如3,2、3,4)时,抛出异常:
System.FormatException: 'Input string was not in a correct format.'

原代码

using System.Text;

namespace homework4_2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Unicode;
            Console.InputEncoding = Encoding.Unicode;

            
            Console.Write("введіть число від 0-100: ");
            double ClientNum = (Convert.ToInt32(Console.ReadLine()));

            if (ClientNum <= 14)
            {
                Console.WriteLine("Твоє число в діапазоні 0-14");
            }

            else if (ClientNum <= 35 )
            {
                Console.WriteLine("Твоє число в діапазоні 15-35");
            }

            else if (ClientNum <= 50)
            {
                Console.WriteLine("Твоє число в діапазоні 36-50");
            }
            
            else if (ClientNum <= 50)
            {
                Console.WriteLine("Твоє число в діапазоні 51-100");
            }

            else
            {
                Console.WriteLine("немає діапазона у якому б було твоє число");
            }
        }
    }
}

错误原因

  1. 类型转换错误:代码中使用Convert.ToInt32()解析输入,该方法仅能处理整数格式字符串,带逗号的小数不符合整数格式,直接触发格式异常。即便改为转换double,若未指定对应文化(乌克兰语区域以逗号作为小数点分隔符),默认解析逻辑也无法识别逗号格式的小数。
  2. 范围判断逻辑错误:第四个else if (ClientNum <=50)与第三个条件重复,导致51-100的范围永远不会被触发。

修正后的代码

using System;
using System.Text;
using System.Globalization;

namespace homework4_2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Unicode;
            Console.InputEncoding = Encoding.Unicode;
            // 指定乌克兰语文化,适配逗号作为小数点的格式
            var ukCulture = new CultureInfo("uk-UA");

            Console.Write("введіть число від 0-100: ");
            if (double.TryParse(Console.ReadLine(), NumberStyles.Float, ukCulture, out double clientNum))
            {
                if (clientNum <= 14)
                {
                    Console.WriteLine("Твоє число в діапазоні 0-14");
                }
                else if (clientNum <= 35)
                {
                    Console.WriteLine("Твоє число в діапазоні 15-35");
                }
                else if (clientNum <= 50)
                {
                    Console.WriteLine("Твоє число в діапазоні 36-50");
                }
                else if (clientNum <= 100)
                {
                    Console.WriteLine("Твоє число в діапазоні 51-100");
                }
                else
                {
                    Console.WriteLine("немає діапазона у якому б було твоє число");
                }
            }
            else
            {
                Console.WriteLine("Некоректний формат числа!");
            }
        }
    }
}

关键修正点

  • 使用double.TryParse()替代强制转换,同时指定乌克兰语文化(uk-UA),确保能正确解析以逗号作为小数点的小数。
  • TryParse可以避免输入无效格式时直接抛出异常,而是友好提示错误。
  • 修正范围判断逻辑,将第四个条件改为clientNum <=100,确保51-100的范围能被正确匹配。

内容的提问来源于stack exchange,提问作者PROKA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:25:40