0

cellforrowAtIndexPath で float または double の値を比較するコードがあります。私はそれを比較し、比較値を評価する際にtableViewセルに色を設定しています.しかし、値が異なる間に等しくない条件に入らない場合があります. float または double の値。条件 (!=) と等しくない内部のログが出力されないことがあります。

私のコードは次のとおりです:---

double br_preVal=[[[prevDict valueForKey:@"bestbuyprice"] valueForKey:@"text"] doubleValue];
double br_nxtVal=[[[tempDic valueForKey:@"bestbuyprice"] valueForKey:@"text"] doubleValue];

double sr_preVal=[[[prevDict valueForKey:@"bestsellprice"] valueForKey:@"text"] doubleValue];
double sr_nxtVal=[[[tempDic valueForKey:@"bestsellprice"] valueForKey:@"text"] doubleValue];


if (br_nxtVal!=br_preVal) {

    NSLog(@"buy rate Not equal === and values %f,%f",br_preVal,br_nxtVal);

    if (br_nxtVal>br_preVal) {
        [mwCell.buyRate setBackgroundColor:t.socketHighbgColor];
        mwCell.buyRate.textColor=t.socketHighfgColor;

        [celllc replaceObjectAtIndex:indexPath.row withObject:t.socketHighbgColor];
    }else{
        [mwCell.buyRate setBackgroundColor:t.socketLowbgColor];
        mwCell.buyRate.textColor=t.socketLowfgColor;

        [celllc replaceObjectAtIndex:indexPath.row withObject:t.socketLowbgColor];
    }
}else{

    mwCell.buyRate.backgroundColor=[celllc objectAtIndex:indexPath.row];
    mwCell.buyRate.textColor=([[celllc objectAtIndex:indexPath.row] isEqual:t.socketLowbgColor])?t.socketLowfgColor:t.socketHighfgColor;
}

if (sr_nxtVal!=sr_preVal) {

    NSLog(@"sell rate Not equal === and values ==  %f,%f",sr_preVal,sr_nxtVal);

    if (sr_nxtVal>sr_preVal) {
        [mwCell.sellRate setBackgroundColor:t.socketHighbgColor];
        [mwCell.sellRate setTextColor:t.socketHighfgColor];

        [cellrc replaceObjectAtIndex:indexPath.row withObject:t.socketHighbgColor];
    }else{
        [mwCell.sellRate setBackgroundColor:t.socketLowbgColor];
        [mwCell.sellRate setTextColor:t.socketLowfgColor];

        [cellrc replaceObjectAtIndex:indexPath.row withObject:t.socketLowbgColor];
    }
}else{

    mwCell.sellRate.backgroundColor=[cellrc objectAtIndex:indexPath.row];
    mwCell.sellRate.textColor=([[cellrc objectAtIndex:indexPath.row] isEqual:t.socketLowbgColor])?t.socketLowfgColor:t.socketHighfgColor;
}

mwCell.buyRate.text=[NSString stringWithFormat:@"%.2f",br_nxtVal];
mwCell.sellRate.text=[NSString stringWithFormat:@"%.2f",sr_nxtVal];

float 値は 2396.250000 のようなものです

4

3 に答える 3

1

このように比較してみてください

#define kVerySmallValue (0.000001)
  if(fabsf(br_nxtVal - br_preVal) < kVerySmallValue) {
  //// Your code
  }
于 2013-06-13T06:27:40.030 に答える
0

浮動小数点値を比較する最良の方法は、範囲を使用することです

if(4.0<=a&&a<=4.5)

またはあなたが使用することができますfabs(number)< comparator >fabs(number)

于 2013-06-13T06:02:49.490 に答える