0

生徒用の採点アプリを作成していますが、比較演算子が期待どおりに機能していません。私のコードは次のとおりです。

float FINAL = ((_gradeyouwant - (_quarter1 * 0.2f) - (_quarter2 * 0.2f) - (_quarter3 * 0.2f) - (_quarter4 * 0.2f) - (_quarterM * 0.1f)) / 0.1f);

NSLog(@"q1 = %.2f", _quarter1);
NSLog(@"q2 = %.2f", _quarter2);
NSLog(@"q3 = %.2f", _quarter3);
NSLog(@"q4 = %.2f", _quarter4);
NSLog(@"qM = %.2f", _quarterM);
NSLog(@"qF = %.2f", FINAL);
NSLog(@"grade = %.2f", _gradeyouwant);

if ((FINAL > 4.3f))
{
    [_result setText:[NSString stringWithFormat:@"It is not possible to get your desired grade."]];
}else if ((FINAL > 4.0f))
{
    [_result setText:[NSString stringWithFormat:@"You would need to get an A+"]];
}else if ((FINAL > 3.7f))
{
    [_result setText:[NSString stringWithFormat:@"You would need to get an A"]];
}else if ((FINAL > 3.3f))

ETC. ETC.

NSLog で出力を見ると、すべての正しい値がわかります。ただし、FINAL が 4.0 になるようにすると、正しい文字列が出力されません。FINAL > 4.0 になると、その行は実行されないだろうと考えていました。しかし、そうです。私は何を間違っていますか?よろしくお願いします!

4

1 に答える 1

1

これは、フロートがどのように機能するかとほぼ同じです。グーグルそれ、例えばhttp://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

システムは4.0を正確に保存できない場合があります。これは、CPUとデータ型の選択の制限です。範囲を使用すると非常にうまくいく可能性があります。

intを使用して、10進数をエミュレートします(例:GPA * 100)。

于 2012-06-18T21:57:41.517 に答える