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

C#控制台程序无法输入小数值,请求技术协助

问题分析与修复

核心输入问题

你的代码里重复调用了Console.ReadLine(),这是导致无法正确读取小数的直接原因,和double.TryParse()本身无关:

  • 每次提示输入后,你先调用一次Console.ReadLine()但未保存结果,直接丢弃了用户的第一次输入
  • 随后double.TryParse()又调用一次Console.ReadLine(),实际读取的是用户的第二次输入,造成逻辑混乱

修复后的代码

using System;
using System.Globalization;
using System.Threading;

namespace ConsoleApp
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            Console.InputEncoding = System.Text.Encoding.UTF8;

            // 设置小数分隔符为.
            CultureInfo customCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
            customCulture.NumberFormat.NumberDecimalSeparator = ".";
            Thread.CurrentThread.CurrentCulture = customCulture;

            Console.WriteLine("Calculate expression");
            Console.ReadLine();

            double x, y, z, s;

            // 读取x的逻辑修复
            do
            {
                Console.WriteLine("Enter fractional x = ");
                string input = Console.ReadLine();
                if (double.TryParse(input, out x))
                    break;
                else
                    Console.WriteLine("Error try again!");
            } while (true);

            // 读取y的逻辑修复
            do
            {
                Console.WriteLine("Enter fractional y = ");
                string input = Console.ReadLine();
                if (double.TryParse(input, out y))
                    break;
                else
                    Console.WriteLine("Error try again!");
            } while (true);

            // 读取z的逻辑修复
            do
            {
                Console.WriteLine("Enter fractional z = ");
                string input = Console.ReadLine();
                if (double.TryParse(input, out z))
                    break;
                else
                    Console.WriteLine("Error try again!");
            } while (true);

            // 修复整数除法问题:1/4改为0.25确保浮点运算
            s = Math.Pow(2, -x) * Math.Sqrt(x + Math.Pow(Math.Abs(y), 0.25)) * Math.Pow(Math.Exp((x - 1) / Math.Sin(z)), 1.0 / 3);
            Console.WriteLine($"Result: s = {s:F3}");
            Console.ReadLine();
        }
    }
}

额外修复点

代码里还有一个隐藏bug:

  • 1 / 4是整数除法,结果为0,会导致Math.Pow(Math.Abs(y), 1/4)等价于Math.Pow(Math.Abs(y), 0),结果恒为1
  • 需改成0.25或者1.0 / 4,确保执行浮点除法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:30:52