2017-05-19 7 views
0

小数点以下1桁を取得してdoubleとして格納しようとしています。例えば用 : -小数点以下1桁を取得Objective C

float A = 146.908295; 
NSString * string = [NSString stringWithFormat:@"%0.01f",A]; // op 146.9 
    double B = [string doubleValue]; // op 146.900000 

私は、二重またはフロート形式で146.9として出力したい...、複製またはこの出力に対する答えが与えられていることを確認しますdownvoting前に... おかげ

編集: - なり、ここで

NSString * str = [NSString stringWithFormat:@"%0.01f",currentAngle]; 

    tempCurrentAngle = [str doubleValue];; 

    tempCurrentAngle = tempCurrentAngle - 135.0; 

    if (tempCurrentAngle == 8.7) { 
     NSLog(@"DONE "); 
    } 

currentAngleがcontinueTrackingWithTouch方法から来ているが、それはループさえtempCurrentAngle値が変化した場合では入らないfloat..here 8.700000に。あなたは、あなたが、なぜそれがif caluseに入っていなかったという考えを取得します行ずついったんデバッグする場合

+1

数学的に '146.9'と' 146.900000'は同じです!なぜあなたは '146.9'が必要なのでしょうか?この値を表示する必要があるときは、文字列で変換しなければならないので、必要な小数点を表示することができます! – Lion

+0

私は数学を実装し、さらにそれを比較する必要があります... –

+0

あなたが '146.9と146.900000'を比較するなら、それは等しいでしょう! – Lion

答えて

1

あなたは、

double currentAngle = 143.7; // I have taken static values for demo. 
double tempCurrentAngle = 0.0; 

NSString * str = [NSString stringWithFormat:@"%0.01f",currentAngle]; 

tempCurrentAngle = [str doubleValue];; 

tempCurrentAngle = tempCurrentAngle - 135.0; 

NSString *strToCompare = [NSString stringWithFormat:@"%0.01f",tempCurrentAngle]; 

if ([strToCompare isEqualToString:@"8.7"]) { 

    NSLog(@"DONE "); 
} 

を代わりのような二重の文字列値を比較することができます。

tempCurrentAngleあなたはdoublestrを変換するとき、それはですので、あなたがそれから135.0を減らす143.69999999999999を取得した値が8.6999999999999886になり、その後、あなたはそれは間違いなく等しくないでしょう8.7とそれを比較します!小数点以下1桁のtempCurrentAngle文字列を変換すると、8.7になります!ダブルの代わりに文字列の値を比較する必要があります!

+0

私はこのソリューションを試してみましたが、それは早く動作しますが、さらに数学を実装するためには、もう一度二重で変換する必要があります。 –

+0

ええ、そうしなければなりません!あなたは1小数点で2倍の値を得ることができないからです! – Lion

+0

yeah ..thanks mate –

関連する問題