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
相关产品推荐
相关产品推荐

