質問

ココアのNSNumberがNaN(非数)を表す場合、

はどのように判断することができますか?

私は無効(非数値)の内容を持つ文字列を解析するとき、

これは、例えば、出ます。

役に立ちましたか?

解決

だから、私はクラスのプロパティ[NSDecimalNumber notANumber]は、まさにこの目的のためであることが判明しました。いくつかの言語のNaN!= NaNのであるが、これはココアではそうではありません。

他のヒント

マイク・アブドラが言うように、

、ココアではNaNを表現する自然な方法はnilであるが、有効なオブジェクトを返す[NSNumber numberWithDouble:NAN]ありません。この検出のないNSNumber固有の方法が、一般的な方法、isnan([foo doubleValue])、作品はありません。あなたが機能を好きではない場合は、カテゴリにそれを固執することができます。

小数点の場合、少なくともます:

[[NSDecimalNumber notANumber] isEqualToNumber:myNumber]

のNSNumberがNaNである場合、二重に変換し、C関数isnan()を決定するために使用

NSNumber *validNumber = [NSNumber numberWithDouble: 1.];
NSLog( @"%d", isnan(validNumber.doubleValue) ); // prints "0"

NSNumber *nanNumber = [NSNumber numberWithDouble: 0./0.];
NSLog( @"%d", isnan(nanNumber.doubleValue) ); // prints "1"

その他の特殊な値があるので、しかし、あなたはたとえば、注意する必要があります:

NSNumber *posInfinity = [NSNumber numberWithDouble: 1./0.];
NSLog( @"%d", isnan(posInfinity.doubleValue) ); // prints "0"

あなたにも、これらの値をチェックしたい場合は、代わりにisnormal()を使用することをお勧めします。

NSLog( @"%d", isnormal(validNumber.doubleValue) ); // prints "1"
NSLog( @"%d", isnormal(nanNumber.doubleValue) ); // prints "0"
NSLog( @"%d", isnormal(posInfinity.doubleValue) ); // prints "0"

私は、これが機能することを見つけ、それは合法です?

NSNumber *NaN = [NSDecimalNumber notANumber];

NSDecimalNumber *x = ... fill it somehow with NaN content ...

if ( x == NaN ) ... this works

NaN一定値にsingleton guaranteeedのですか?クールに、私はそれは私がisEqualメソッドを使用したすべての例から、ではないと仮定します。

関数ISNANは()もあります。今日はそれを見つけます。

またfollwsとしてのmath.hで定義されます。#defineを使用することができます。

if(isnan(myNumber))
{  // myNumber is NaN .

}

NaNを持つ任意のブール式は常にfalseを返します。しかし、どのようにそれは便利です?

私は戻ってlocationInViewからナンを得ていた:iPhoneアプリのいくつかのジェスチャーを処理中。そして、NaNを持つ任意のブール式が常にfalseを返すことを見つけることは非常に喜んでいました。

:私は下のliek使用するためにこれを置きます

//私はUIPanGestureRecognizerを使用して、TouchUpの上のI /場所.Xのためにナンを得るだろうと思われた - .Y - 。かなりreasonibleこの場合にはタッチの終わりには場所を持っているdoesntのため、

CGPoint location = [gestureRecognizer locationInView:self];

if ( location.x != location.x || location.y != location.y )
{
 return;
}

それでは限り.Xおよび.Yまたは正当な浮動小数点値は、もちろん、彼らはそこに自分の値と等しくないことはありません。しかし.Xの場合、またはNaNいる.Y、比較はfalseになります。 そして、私は無事ナンで計算を避けることができます。

本当にそれは数ではない場合、その後、まあ、それはするNSNumberではありませんので、のNSNumberのためのようなオブジェクトはありません。これは、これを表現するためにはnilオブジェクトを使用する方が普通です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top