私が取り組んでいるいくつかのコードでこれを見ています:
num1 = (float)double.Parse(parameters[i + 1]);
num2 = (float)double.Parse(parameters[i + 2]);
なぜ彼らはfloat.Parse
代わりにを使用double.Parse
してにキャストしないのか疑問に思っていましたfloat
。正当な理由はありますか?
私が取り組んでいるいくつかのコードでこれを見ています:
num1 = (float)double.Parse(parameters[i + 1]);
num2 = (float)double.Parse(parameters[i + 2]);
なぜ彼らはfloat.Parse
代わりにを使用double.Parse
してにキャストしないのか疑問に思っていましたfloat
。正当な理由はありますか?
正当な理由はありますか?
はい。上記のコードはOverflowException
、パラメーターが大きい場合に発生しますが、コードは最大値が float max の値のみを想定しています。
正当な理由はありますか?
あまり。ここでの主な違いは次のとおりです。
少し余分なオーバーヘッド (もちろん、これはまったく有益ではありません)
値が単一で表現できる範囲外である場合、別の潜在的な例外。
一般に、これはSingle.Parseを直接使用するだけでよいはずです。
このコードを試してみると、たとえば数値が大きすぎて float を使用して表現できない場合、例外が発生することがわかりますが、double から float にキャストすると、例外は発生しません。その数は無限大になります。自分で試してみてください:
string numString = "23339823498723948723958734956283468237468273468274602983409283.4092834092834029834029384029834";
double num2 = double.Parse(numString);
float num3 = (float)num2;
float num1 = float.Parse(numString);
誰かが最初にこの動作を予期していたのかもしれません。ただし、このアプローチの代わりに try catch を使用します。