これには潜在的に簡単な答えがありますが、私はそれを理解できません-
double Result = 1 / 12;
0 を返しますが、
double Result2 = 24 / 12;
リターン 2
どうすれば修正できますか?
これを試して:
double Result = 1 / (double)12;
またはこれ:
double Result = 1 / 12D;
C# (および他の多くの言語) では、整数除算は整数を返します。オペランドの 1 つをdouble
リテラルにキャストするか明示的に宣言するdouble
ことにより、除算式が a を返すようdouble
にし、小数点以下を切り捨てないようにすることができます。
it is doing integer math because the numbers on the right are evaluated as integers.
try 1.0/12
;
あなたの価値観をキャストする必要があると思います
double Result = (double)1 / (double)12
整数ベースの数学と関係があり、常に整数を返します.....
これもうまくいきます
Decimal.Divide(1, 12)
より精度の高い結果が得られますが、範囲は狭くなります。
問題は、1
と12
が整数 (型int
ではなくdouble
) であることです。これは、値が小数点以下を無視することを意味します。1 を 12 で割ると 0.083 になります。の場合、小数点以下は切り捨てられるためint
、 が残ります0
。
期待される結果を得るには、オペランドの 1 つが type である必要がありますdouble
。これを行うには、 にまたは 12 を に(またはオペランドの少なくとも 1 つが a である限り、両方) に変更1
します。1.0
12.0
double