2011-01-03 26 views
2

このプログラムでは、簡単な電卓を作成しようとしています。しかし、私はMath.Pow行に達すると上記のエラーを克服する方法を見つけることができないようです。Math.Powは「暗黙のうちにdouble型をfloat型に変換できません」エラー

namespace BinaryCalc 
{ 
    class Binary 
    { 
     public static void Main() 
     { 

     int addition,subtraction; 
     float division, multiplication, power, sqrt; 

     int x; 
     int y; 
     x = 10; 
     y = 7; 

     //Console.WriteLine("Please enter a number for x"); 
     //string line = Console.ReadLine(); 
     //int x = int.Parse(line); 

     //Console.WriteLine("Please enter a number for y"); 
     //string line2 = Console.ReadLine(); 
     //int y = int.Parse(line2); 


     addition = (int)x + (int)y; 
     subtraction = (int)x - (int)y; 
     division = (float)x/(float)y; 
     multiplication = (float)x * (float)y; 

     power = Math.Pow(x,2); 
     sqrt = Math.Sqrt(x); 


     Console.WriteLine(" Addition results in {0}", addition); 
     Console.WriteLine(" Subtraction results in {0}", subtraction); 
     Console.WriteLine(" Division results in {0}", division); 
     Console.WriteLine(" Multiplication results in {0}", multiplication); 
     Console.WriteLine(" {0} squared results in {0}",x, power); 
     Console.WriteLine(" Square root of {0} is: {0}", x, sqrt); 

     } 
    } 
} 

答えて

4

Math.Powは、double引数を使用します。エラーが言うように、そこdoubleからfloatへの暗黙の型変換がないので、結果をfloatへ明示的を変換:

power = (float)Math.Pow(x, 2); 

EDIT
は変換順序

+0

迅速な返信をありがとう。私は実際にはすでにそれを試みたが、エラーが消えても、それは私に間違った応答を与える。平方根を含む次の行についても同様です。 – Alexandros

+0

@Alexandros間違った返答をどういう意味ですか? – CodesInChaos

+0

コンソールの出力は、10の平方根が10であることを示しています.2の累乗に10の応答として同じ数字が与えられています。 – Alexandros

5

戻り値を修正しましたMath.Powの値はdoubleです。プログラム内の変数powerは、floatです。範囲と精度はより低くなります。

powerdoubleと定義する必要があります。

+0

または単に 'float'の大文字と小文字を区別します。浮動小数点と二重浮動小数点の違いに気づかずにプログラマーがここで間違いを犯したとしても、まったく問題にはならないと思います。 – Joey

+0

@Joey: 'float'にキャスティングすると、例外が発生します。 OPが最終結果を「浮動小数点数」に収める必要がある場合、これはソリューションの一部になる可能性がありますが、それ自体ではありません。追加の "合わない場合はどうするか"のロジックが必要になります。 – Jon

+0

Jon、例外はありますか?適合しない場合は、無限または0でクランプされます。ここでは整数型ではなく浮動小数点数を使用しています。また、OPが投稿したクラスを見てください。あなたは本当に '25'の代わりに' 1e200'の周りの数字でこれを試すことを期待していますか? – Joey

1

変数にfloatの代わりにdoubleを使用してください。

floatデータタイプの精度は非常に限定されているため、丸め誤差(浮動小数点算術演算では常に存在する)は比較的大きいです。

正方形と平方根の結果が間違っている理由は、決して結果を表示しないことです。 {1}に各フォーマット文字列で{0}のいずれかを変更します。

Console.WriteLine(" {0} squared results in {1}",x, power); 
Console.WriteLine(" Square root of {0} is: {1}", x, sqrt); 
0

次のような浮かぶようにMath.Powの結果をキャスト明示的に試すことができます。

power = (float) Math.Pow(x, 2); 

あなたはまたにフロートのTryParseメソッドを使用することができますMath.Powの結果を試してみて、解析:

float.TryParse(Math.Pow(x, 2).ToString(), out power); 

また、あなたは最後の2 Console.WriteLiのフォーマット文字列パラメータ番号を変更したい場合がありますneメソッド呼び出し。次のように表示されます。

Console.WriteLine(" {0} squared results in {1}",x, power); 
Console.WriteLine(" Square root of {0} is: {1}", x, sqrt); 
+4

'TryParse'で文字列を調べることは間違いありません。 – Joey

+0

TryParseが最適ではないと思う理由は理解できますが、なぜdownvoteも同様です。間違った応答や有害な応答の下降音はありませんか?この問題に対する有効な答えです(文字列フォーマットでのエラーとの組み合わせ)。 – avanek

関連する問題