2017-09-09 15 views
-3

私は非常にプログラミングが新しく、2つの電荷とそれらの間の距離をクーロンズ法律。 文字列を小数点に変換することに問題があるようです。 複数の発声(Q1、Q2、r)をどのように乗算するのかよく分かりません(C#)文字列に関してConvert関数に問題があります

これは私のコードとコンソールの表示とエラーメッセージです。 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

です。@ un-luckyはコンソールウィンドウを参照してください。 – Sybren

+0

Q1。+ 5 * 10^-3の場合はおそらくisn ' tはConvert.ToDecimalへの入力を有効にします。それは10進数として直接解析することはできません – Nattrass

答えて

-1

すでにConvert.ToDecimal()の有効な入力ではありませんNattrass+5*10^-3によるコメントで指摘しました。

ユーザーが指数表記で数値を入力することを前提とします。

だから私は+5*10^-3から5E-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をparseメソッドに追加することができます。

decimal Q2 = Decimal.Parse("-1E-1", NumberStyles.AllowExponent 
            | NumberStyles.AllowDecimalPoint 
            | NumberStyles.AllowLeadingSign, 
          CultureInfo.InvariantCulture); 

あなたのコードは、他のいくつかの問題があります。

Decimal k = (9 * 10^9);
あなたの定数を計算たとえばあなたは10のベースで9の力を示すために^演算子を使用しているが、C#で、それはXOR operatorとして使用されています。したがって、定数を計算するにはMath.Pow()を使用する必要があります。

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

戻り値はすでにstringのタイプであるため、また、Convert.ToString(Console.ReadLine());を避ける必要があります。
代わりに、コンソールからの入力をdecimalにキャストし、計算時に後のコードで複数のキャストを行わないようにすることができます。 How to Read decimal numbers from a user in C#?

関連する問題