0

私はiOSアプリケーションで抱えていたかなり奇妙な問題を解決しました。64/38 ~= 1.684メソッドに渡される値にスケーリング係数(私が計算した)を適用する必要があります。

私の問題の核心は次のようになります。

- (void)applyScaleTo:(int)value {

    // value := 64
    int first = value * (64/38)
    NSLog(@"First: %d", first);
    int second = (64 * value)/38;
    NSLog(@"Second: %d", second);

}

目的の値はです107が、ログは次のようになります。

First: 64
Second: 107

私の解決策は2番目の方法を使用することですが、これは問題ありませんが、私の質問は、なぜこの不一致なのかということです。(ちなみに、firstがに変更されたfloat場合でも、としてログに記録され64.00000...ます。)

4

1 に答える 1

3

最初のケースでは、2つの整数(64と38)を除算すると、整数値が返されます(1)。これを修正するには、結果の値をfloatに変更する必要はありません(これにより、64の整数結果がfloatに変換されるだけです)が、部門のオペレーターの少なくとも1人が変更されます。

int first = value * ( (float) 64 / 38)

これは結果としてあなたに107を与えるはずです

于 2012-12-05T09:15:21.083 に答える