2016-08-30 4 views
0

これは本当に基本的な質問ですが、なぜこれが問題なのかを教えてください。結果が10進数でなければならない場合でも、varはintにキャストされます

var number = 7/2; // number is 3 
decimal number = 7 /2; // still number is 3 

なぜ数字が3.5ではないのですか?なぜそれは常にintにキャストされますか?数字は両方ともintなので?これは、数値のいずれかを10進数にキャストするときに機能します。

+3

あなたは2つの整数を分割している、結果は常に整数です。 – Steve

+1

分母は2(2.0に変更)なので、コンパイラは結果の小数部分を切り捨てます。 – jdweng

+0

式* 7/2 *(型 'int' /' int')は、整数除算を使用するので、整数値3に評価されます。 –

答えて

7

リテラル72を使用しています。したがって、除算はの整数部であり、intの値が3になります。 varキーワードを使用

、コンパイラ型intの最初の行であることにnumberにつながる表現から正しいタイプを推測。 2行目

は、明示的に小数点としてnumberを宣言し、その7/2によって返さintdecimalにキャストされます。


あなたは結果がdecimalになりたい場合は、あなたがmで正しいリテラル語尾を使用する必要があります。

var number = 7/2m; 
3

7/3(int)7/(int)3です。 あなたがdecimalを取得したい場合は、両方がintとして、コンパイラによって解釈され7m/2m

+0

' 7/2m'を実行すれば十分です –

+0

@ GiladGreenうん、それで十分だろう。 –

+0

@GiladGreenまたは '7m/2' – slawekwin

関連する問題