(C#)我在转换函数方面遇到了关于字符串的问题

时间:2017-09-09 09:29:49

标签: c#

我对编程非常陌生,我想创建一个小型控制台应用程序,根据库仑定律计算出2次充电时的力量和它们之间的距离。 我似乎在将字符串转换为小数时遇到问题。 我不太确定如何乘以多个刺(Q1,Q2和r)

这是我的代码图像以及控制台显示和错误消息。 console output

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();

1 个答案:

答案 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#?