0

こんにちは、分割にフロートを使用することに大きな疑問があります。ここにテストコードがあります::

- (void)chuza
{

    float option1 = 0;
    float option2 = 0;


    option1 = 100/50;
    option2 = 50/100;

    NSLog(@"option1 :: %f",option1);
    NSLog(@"option2 :: %f",option2);

}

だから、私は得る:

2012-10-19 16:21:45.405 Project[2023:14f03] option1 :: 2.000000
2012-10-19 16:21:45.405 Project[2023:14f03] option2 :: 0.000000

だから私の質問は:なぜフロートはいつのようになるのですか?

分母 > 分子

しかし、好きではありません

分子 > 分母 ??

ありがとう!

4

3 に答える 3

5

2 つの整数を除算しているので、これは整数の除算によく似ています。2 つの整数を除算すると (すべてではないにしてもほとんどのプログラミング言語で)、除算の残りが無視されます。

その行がどのように評価されているかを考えてください。最初に整数の除算が計算され、次に整数の結果が float にキャストされて float 変数に格納されます。

整数は小数をまったく格納しないため、整数として 0.999 であっても 0 になることに注意してください。丸めの問題ではありません。

分母が分子よりも大きいということでもありません。100/30 を割ってみると、結果は 3.33333 ではなく 3 になります。

これは、数値を浮動小数点数にキャストするか、浮動小数点数であることを確認することで解決できます。

鋳造

option2 = ((float)50/(float)100);

山車の分割

option2 = 50.0f/100.0f;
于 2012-10-19T05:31:28.513 に答える
3

浮動小数点数で10050浮動小数点数でもなく、整数です。つまり、整数除算を行い、結果を浮動小数点変数に代入しています。整数除算は切り捨てる (小数の結果を破棄する) ため、50/100が得られ0ます。100 は 50 で割り切れるため、2.000000結果が得られます。と を使ってプログラムを試してみる75100、除算がどちらの方向に進むかだけでなく、さらに多くのことが行われていることがわかります。

于 2012-10-19T05:31:21.027 に答える
2

数値を整数として扱い、除算を実行してから、結果を float に入れます。

このオプションを試してください2 = 50.0f/100;

于 2012-10-19T05:31:11.737 に答える