私は29を10で割る必要があるところを書いています。しかし、私がそうしてダブルに保存すると、2.9ではなく2.0000が出力されます。誰かがなぜこれが起こっているのか、どうやって解決するのか説明できますか?Cダブルが期待通りに機能しない
double a = 29/10;
output: 2.0000
私は29を10で割る必要があるところを書いています。しかし、私がそうしてダブルに保存すると、2.9ではなく2.0000が出力されます。誰かがなぜこれが起こっているのか、どうやって解決するのか説明できますか?Cダブルが期待通りに機能しない
double a = 29/10;
output: 2.0000
予想通りdouble
作品、それはあなたがそれをタイプdouble
の発現を割り当てていないだけということです。あなたはそれを割り当てる何
はint
、10
により、29
、int
を分割した結果、int
です。これは、2
です。これは、整数を分割するときに余りが破棄されるためです。
29
〜29.0
または〜10.0
を変更するとこの問題が修正されます。
29/10
は、整数除算を実行します。結果は2(残りは9)です。
try (double)29/10
または29.0/10
です。
明確にするには、 '(double)29/10'と書く方が良いでしょう。 – chqrlie
これは古典的なCミスです。整数除算を行い、浮動小数点結果を要求しています。
あなたが浮動小数点演算に関するすべての詳細を発見したい場合は、What Every Computer Scientist Should Know About Floating-Point Arithmeticをお読みください
double a = 29.0/10.0;
と浮動小数点除算を行う必要があります。
[なぜ2つの整数を分割すると浮動小数点が得られないのですか?](http://stackoverflow.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float) – OldProgrammer