我对编程非常陌生,我想创建一个小型控制台应用程序,根据库仑定律计算出2次充电时的力量和它们之间的距离。 我似乎在将字符串转换为小数时遇到问题。 我不太确定如何乘以多个刺(Q1,Q2和r)
Console.WriteLine("Welcome to Dieter's Coulomb's Law Calculator!");
Console.WriteLine("Press Enter to continue.");
String Q1;
String Q2;
String r;
Decimal k = (9 * 10 ^ 9);
Console.ReadLine();
Console.WriteLine("All you need to do is insert the first charge, the second chage and the distance between them.");
Console.WriteLine("Remember to give your values in coulombs and meters.");
Console.WriteLine("Charge 1: ");
Q1 = (Console.ReadLine());
Console.WriteLine("Charge 2: ");
Q2 = Convert.ToString(Console.ReadLine());
Console.WriteLine("Distance in m: ");
r = Convert.ToString(Console.ReadLine());
Console.WriteLine(" Equation: k*|Q1*Q2|/r^2");
Console.WriteLine("Equation: " + "9*10^9*" + "|" + Q1 + "*" + Q2 + "|" + "/" + r + "^2" );
Decimal ans = ( k * Convert.ToDecimal(Q1) * Convert.ToDecimal(Q2) / Convert.ToDecimal(r) * Convert.ToDecimal(r));
Console.WriteLine("Answer: " + ans);
Console.ReadLine();
答案 0 :(得分:-1)
正如Nattrass given/given!
在评论中已经指出的那样,let/let!
不是有效输入。
我假设您希望用户以指数表示法输入数字。
所以我建议将您的控制台输入从+5*10^-3
更改为Convert.ToDecimal()
并使用以下代码段使用NumberStyles
解析您的小数:
+5*10^-3
但是我们必须小心小数点(点或逗号),这样你才可以将5E-3
添加到解析方法中。
using System.Globalization;
...
// with any you did not have to care about decimal points and thousand sign
// leading sign and so on..
decimal Q1 = Decimal.Parse("5E-3", NumberStyles.Any); // Q1 = 0.005
// or explicit:
decimal Q2 = Decimal.Parse("-1E-1", NumberStyles.AllowExponent
| NumberStyles.AllowDecimalPoint
| NumberStyles.AllowLeadingSign); // Q2 = -0,1
您的代码还有其他一些问题。
例如计算常数CultureInfo.InvariantCulture
您正在使用decimal Q2 = Decimal.Parse( "-1E-1", NumberStyles.AllowExponent
| NumberStyles.AllowDecimalPoint
| NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture);
运算符以10为基数指示9的幂,但在C#中它用作XOR operator。因此,您应该使用Math.Pow()
来计算常数。
Decimal k = (9 * 10 ^ 9);
您还应该避免使用^
,因为返回值已经是decimal k = (decimal)(9 * Math.Pow(10,9));
的类型
您可以尝试将控制台的输入转换为Convert.ToString(Console.ReadLine());
,并在计算时避免在后面的代码中进行多次转换。此链接可以帮助您扩展代码:How to Read decimal numbers from a user in C#?