2017-09-09 35 views
-3

具有轉換功能的麻煩,我很新的節目,我想創造給予2項收費,並根據庫侖它們之間的距離時,計算力小控制檯應用程序法。 我似乎有問題將字符串轉換爲小數。 我不太清楚如何繁殖多重刺激(Q1,Q2和r)(C#)我有關於字符串

這是我的代碼以及控制檯顯示和錯誤消息的圖像。 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(); 
+0

'Q1,Q2和r'中的值是什麼 –

+0

@不幸運看到控制檯窗口 – Sybren

+0

對於Q1 .. + 5 * 10^-3可能是'將有效的輸入轉換爲Convert.ToDecimal。不能直接解析爲十進制數 – Nattrass

回答

-1

正如評論已經指出的Nattrass+5*10^-3不是Convert.ToDecimal()有效輸入。

我假設你希望用戶在指數形式輸入數字。

因此,我建議你的控制檯輸入改變從+5*10^-35E-3並使用下面的代碼片段使用NumberStyles解析您的十進制:

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

您的代碼也有一些其他的問題。

例如計算你不斷Decimal k = (9 * 10^9);
您正在使用^運營商以10的基礎,但在C#中它被用作XOR operator指示的9電源。所以你應該使用Math.Pow()來計算你的常數。

decimal k = (decimal)(9 * Math.Pow(10,9)); 

你也應該避免Convert.ToString(Console.ReadLine());,因爲返回值已經是一個類型的string
您可以嘗試將控制檯上的輸入轉換爲decimal,並避免在計算時在後面的代碼中進行多重轉換。這個鏈接可能會幫助你延長你的代碼:How to Read decimal numbers from a user in C#?