2

float 値を比較しようとしましたが、できません。次のコードを使用します。

float a = [[array objectAtIndex:(i+1)] floatValue];
float b = [[array objectAtIndex:(i)] floatValue];

a = [[NSString stringWithFormat:@"%.2f",a] floatValue];
b = [[NSString stringWithFormat:@"%.2f",b] floatValue];
step = [[NSString stringWithFormat:@"%.2f",step] floatValue];

float newStep = a-b;

if (newStep != step) {
      NSLog(@"NewStep: %f Step: %f",newStep,step);
}

これは出力です:

2013-04-28 19:07:57.396 Pro[24265:c07] NewStep: 0.220000 Step: 0.220000
2013-04-28 19:07:57.397 Pro[24265:c07] NewStep: 0.220000 Step: 0.220000
2013-04-28 19:07:57.397 Pro[24265:c07] NewStep: 0.220000 Step: 0.220000
2013-04-28 19:07:57.397 Pro[24265:c07] NewStep: 2.420000 Step: 0.220000
2013-04-28 19:07:57.397 Pro[24265:c07] NewStep: 0.220000 Step: 0.220000
2013-04-28 19:07:57.397 Pro[24265:c07] NewStep: 0.220000 Step: 0.220000

明らかにうまくいきません、どこが間違っていますか?コードは正しいようです!

4

1 に答える 1

4

float 変数が等しいかどうかを決して比較しないでください。精度が限られているため、浮動小数点数は概算にすぎません。使用する

if (fabs(a-b)<0.0001) {...

または、同等かどうかを確認する場合は、同様のもの。

于 2013-04-28T17:22:07.827 に答える