2012-02-26 17 views
7

可能性の重複:
C programming division整数の除算は常にゼロ

おそらく私の質問は非常にシンプルで愚かです。 Iは、特に1/xxが 整数値である場合、除算の値を保存したいと思います。

int x = 17; 
double result = 1/x; 

私はそれをしようが、私はいつも、私は例1/17のために、Xに固定値を入力しますが、常に間違って何..同じ値を取得しようと0.000000 ...を取得しますか?

答えて

25

あなたは整数の除算を行っています。

は、以下のことを試してみて、期待どおりに動作します:あなたは上記の持ち式の1

int x = 17; 
double result = 1.0/x; 

タイプはintで、xのタイプはintです。 int/intを実行すると、intバックを取得します。浮動小数点の除算を行うには、少なくとも浮動小数点(floatまたはdouble)のいずれかの型が必要です。

数学とは異なり、C++の除算は、切り捨て整数分裂(あなたがしたこと)または浮動小数点除算(私の例で行ったこと)のいずれかを指すことができます。これに注意してください!私の例では

は、明示的に我々が持っているものdouble/int -> doubleです。

+3

それともそれを明確にする: '1/xダブル結果は=(ダブル);' – Nobody

+1

@Nobodyあなたが1.0/X = '二重の結果を意味するので、'?さて、コンパイラはあなたのためにこれを行いますが、二重リテラルを自分で認識していないためにあなたを笑ってしまうかもしれません。 –

+1

@Christian Rauそれは、自動タイプをより目立たせるための教訓的な例でした。もちろん、プログラマーとしては私は '' 1.0 ''と書くのがずっと短かったからです。 – Nobody