2016-11-05 7 views
0

私は29を10で割る必要があるところを書いています。しかし、私がそうしてダブルに保存すると、2.9ではなく2.0000が出力されます。誰かがなぜこれが起こっているのか、どうやって解決するのか説明できますか?Cダブルが期待通りに機能しない

double a = 29/10; 

output: 2.0000 
+1

[なぜ2つの整数を分割すると浮動小数点が得られないのですか?](http://stackoverflow.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float) – OldProgrammer

答えて

3

予想通りdouble作品、それはあなたがそれをタイプdoubleの発現を割り当てていないだけということです。あなたはそれを割り当てる何

int10により、29intを分割した結果、intです。これは、2です。これは、整数を分割するときに余りが破棄されるためです。

2929.0または〜10.0を変更するとこの問題が修正されます。

1

29/10は、整数除算を実行します。結果は2(残りは9)です。

try (double)29/10または29.0/10です。

+1

明確にするには、 '(double)29/10'と書く方が良いでしょう。 – chqrlie

1

これは古典的なCミスです。整数除算を行い、浮動小数点結果を要求しています。

あなたが浮動小数点演算に関するすべての詳細を発見したい場合は、What Every Computer Scientist Should Know About Floating-Point Arithmeticをお読みください

double a = 29.0/10.0; 

と浮動小数点除算を行う必要があります。

関連する問題