Ios AVAudioPlayer卷条件未正确返回

Ios AVAudioPlayer卷条件未正确返回,ios,objective-c,operators,avaudioplayer,Ios,Objective C,Operators,Avaudioplayer,我有两个AVAUDIOPLAYER,称为“节点”和“区域”。他们有时会在同一时间玩。当这种情况发生时,我需要将“区域”的体积降至0.2。当“节点”完成时,我需要将“区域”返回到它的原始卷(从阵列中拉入)。我有一个adjustPlayerVolume方法和另一个方法,该方法在节点完成时将“nodeIsPlaying”变量设置为false。这两个都很好 下面的代码用于检测卷是否需要上升或下降或保持原样。它位于一个循环中,只要应用程序运行,循环就会一直运行 NSLog(@"Zo

我有两个AVAUDIOPLAYER,称为“节点”和“区域”。他们有时会在同一时间玩。当这种情况发生时,我需要将“区域”的体积降至0.2。当“节点”完成时,我需要将“区域”返回到它的原始卷(从阵列中拉入)。我有一个adjustPlayerVolume方法和另一个方法,该方法在节点完成时将“nodeIsPlaying”变量设置为false。这两个都很好

下面的代码用于检测卷是否需要上升或下降或保持原样。它位于一个循环中,只要应用程序运行,循环就会一直运行

            NSLog(@"Zone Volume = %f", zonePlayer.volume);

            if ((nodeIsPlaying == false) && (zonePlayer.volume <= 0.200000)) {
                float maxVolume = [[[locationArray objectAtIndex:1] valueForKey:@"volume"] floatValue];
                [self adjustZoneVolume:maxVolume];
                NSLog(@"adjustZoneVolume called, node isn't playing and zonePlayer volume needs to be raised");
            }

            if ((nodeIsPlaying == true) && (zonePlayer.volume != 0.200000)) {

                float maxVolume = 0.2;
                [self adjustZoneVolume:maxVolume];
                NSLog(@"adjustZoneVolume called, node is playing and zonePlayer volume needs to be lowered");

            }
NSLog(@“Zone Volume=%f”,zonePlayer.Volume);

if((nodeIsPlaying==false)&&(zonePlayer.volume看起来像是浮点精度问题。运行简单的测试脚本:

int main (int argc, char const *argv[])
{
    float pointTwo = 0.2;

    if(pointTwo == 0.200000)
    {
         NSLog(@"Equal");
    }
    else NSLog(@"not equal");

   return 0;
}


我得到“不相等”。我的建议是避免!=而改为测试zonePlayer.volume是否在0.2-/+范围内。对于精确运算,请使用NSDecimalNumber类

NSDecimalNumber*number=[NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithFloat:zonePlayer.volume]decimalValue];
NSDecimalNumber*number2=[NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithFloat:0.2f]decimalValue]];
NSComparisonResult comparisonResult=[数字比较:number2];
if((nodeIsPlaying==false)&(comparisonResult==sensorderedsame | | comparisonResult==sensorderedescending)){
}