0

たぶんこれはばかげた質問ですが、私は本当にそれを得ることができません。何らかの理由で、私のプログラムのfloat値は、代入ステートメント中に切り上げられます。

コードは次のとおりです。

Float64 time,test;

for( Shot *sh in _arrayOfShots)
{
    time = sh.bFrameTime; 
    // right here time variable gets value rounded up to 2 decimal places
    // for example: if sh.bFrameTime = 81.919998 => time = 81.92

    NSNumber *num = [NSNumber numberWithFloat:time];

    test = [num floatValue];

    [edgeTime addObject:num];
}

// this is my Shot object structure

@interface Shot : NSObject
{
    int bFrame;
    int eFrame;

     Float64 bFrameTime;
}

誰かがこれに対処する方法を知っているなら、私にヒントをください!

ありがとうございました!

4

2 に答える 2

1

81.919998=>時間=81.92

「小数点以下第2位を四捨五入」していません。2つの違いは0.000002で、大きさの変化は0.0000000244、つまり小数点以下8桁です。ソース値が単精度浮動小数点の場合、小数点以下7桁の精度しかありません。(しかし、あなたはその宣言を示さなかったので、私たちは言うことができません。)

NSLogはわずかな丸めを行うため、この違いは2つの値の表示方法にも関係している可能性があります。

于 2012-10-25T21:48:33.313 に答える
0

丸められた数値が最初の数値よりも大きいかどうかを確認するifステートメントを追加します。大きい場合は、1を引きます。

于 2012-10-25T21:01:59.113 に答える