質問
はどのように判断することができますか?
私は無効(非数値)の内容を持つ文字列を解析するとき、これは、例えば、出ます。
解決
だから、私はクラスのプロパティ[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オブジェクトを使用する方が普通です。