INDEX>Foundation>NSDecimalNumber
解説
十進数オブジェクト
継承 | NSNumber : NSValue : NSObject |
準拠 | NSCopying (NSValue) |
NSSecureCoding | |
NSObject (NSObject) | |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | Mac OS X v10.0以降 |
iOS 2.0以降 | |
定義 | NSDecimalNumber.h |
- 出版社/メーカー: ideaco (イデアコ)
- メディア: ホーム&キッチン
- クリック: 3回
- この商品を含むブログ (1件) を見る
概要
十進数を表すオブジェクトです。四則計算や累乗、オブジェクト同士の比較などができます。丸め処理(四捨五入・切り上げ・切り捨て)などの挙動をカスタマイズすることができます。
十進数オブジェクトの作成
NSDecimalからNSDecimalNumberオブジェクトを作成するには(+ decimalNumberWithDecimal)メソッドを使用します。仮数と指数と正負でNSDecimalNumberオブジェクトを作成するには(+ decimalNumberWithMantissa:exponent:isNegative)メソッドを使用します。(仮数×10 ^指数となります。)
文字列からNSDecimalNumberオブジェクトを作成するには(+ decimalNumberWithString)メソッドを使用します。文字列とロケールからNSDecimalNumberオブジェクトを作成するには(+ decimalNumberWithString:locale)メソッドを使用します。
1の値を持つNSDecimalNumberオブジェクトを作成するには(+ one)メソッドを使用します。
0の値を持つNSDecimalNumberオブジェクトを作成するには(+ zero)メソッドを使用します。
NaN(数字でない)の値を持つNSDecimalNumberオブジェクトを作成するには(+ notANumber)メソッドを使用します。
文字列から十進数オブジェクトを作成
Objective-C
#pragma mark NSDecimalNumber decimalNumberWithString: -(void)method004 { NSDecimalNumber *dNum1 = [NSDecimalNumber decimalNumberWithString:@"12345.12"]; NSLog(@"%s %@",__FUNCTION__,[dNum1 description]); //-[OOOAppDelegate method002] 12345 }
十進数オブジェクトの初期化
allocで作成した後NSDecimalからNSDecimalNumberオブジェクトを初期化するには(– initWithDecimal)メソッドを使用します。
allocで作成した後、仮数と指数と正負でNSDecimalNumberオブジェクトを初期化するには(– initWithMantissa:exponent:isNegative)メソッドを使用します。
allocで作成した後、文字列からNSDecimalNumberオブジェクトを作成するには(– initWithString)メソッドを使用します。
allocで作成した後、文字列とロケールからNSDecimalNumberオブジェクトを作成するには(– initWithString:locale)メソッドを使用します。
計算の実行
レシーバに別の十進数オブジェクト(NSDecimalNumber)を加算して新しく十進数オブジェクト(NSDecimalNumber)を作成して返すには(– decimalNumberByAdding)メソッドを使用します。レシーバから別の十進数オブジェクトを減算して新しく十進数オブジェクトを作成して返すには(– decimalNumberBySubtracting)メソッドを使用します。
レシーバと別の十進数オブジェクトを乗算して新しく十進数オブジェクトを作成するには(– decimalNumberByMultiplyingBy)メソッドを使用します。
レシーバと別の十進数オブジェクトを除算して新しく十進数オブジェクトを作成するには(– decimalNumberByDividingBy)メソッドを使用します。
レシーバを累乗(2乗や3乗など)して新しく十進数オブジェクトを作成するには(– decimalNumberByRaisingToPower)メソッドを使用します。レシーバに10の累乗を掛けて新しく十進数オブジェクトを作成するには(– decimalNumberByMultiplyingByPowerOf10:)メソッドを使用します。
上記のメソッドに、四捨五入などの丸め挙動を付加したメソッドがあります。(– decimalNumberByAdding:withBehavior)(– decimalNumberBySubtracting:withBehavior)(– decimalNumberByMultiplyingBy:withBehavior)(– decimalNumberByDividingBy:withBehavior)(– decimalNumberByRaisingToPower:withBehavior)(– decimalNumberByMultiplyingByPowerOf10:withBehavior:)
計算 4の3乗を求める
Objective-C
#pragma mark NSDecimalNumber decimalNumberByRaisingToPower: -(void)method014 { NSDecimalNumber *dNum1 = [NSDecimalNumber decimalNumberWithString:@"4"]; NSDecimalNumber *dNum3 = [dNum1 decimalNumberByRaisingToPower:3]; NSLog(@"%s %@",__FUNCTION__,[dNum3 description]); //-[OOOAppDelegate method014] 64 }
丸め
指定した方法で四捨五入・切り捨てなどを行った新しい十進数オブジェクトを返すには(– decimalNumberByRoundingAccordingToBehavior)メソッドを使用します。
丸め挙動を変更する
#pragma mark +decimalNumberHandlerWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero: -(void)method001 { NSDecimalNumber *dNum1 = [[NSDecimalNumber alloc] initWithString:@"3.1415926535897932384626433832795028841971693993751058209749445923078164"]; NSDecimalNumber *dNum = [NSDecimalNumber alloc] ; NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:4 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; dNum = [dNum1 decimalNumberByRoundingAccordingToBehavior:roundingBehavior]; NSLog(@"%s %f",__FUNCTION__,[dNum doubleValue]); //-[OOOAppDelegate method001] 3.141600 }
値にアクセスする
レシーバをNSDecimal値で取得するには(– decimalValue)メソッドを使用します。レシーバの値をdoubleで取得するには(– doubleValue)メソッドを使用します。レシーバの値をロケールを考慮して文字列で取得するには(– descriptionWithLocale)メソッドを使用します。
レシーバのタイプを取得するには(– objCType)メソッドを使用します。
doubleで値を得る
Objective-C
#pragma mark NSDecimalNumber doubleValue -(void)method024 { NSNumber *integerNumber = [NSNumber numberWithInteger:123456];//32bit double doubleValue = [integerNumber doubleValue]; NSLog(@"%s %f",__FUNCTION__,doubleValue); //-[OOOAppDelegate method024] 123456.000000 }
挙動の管理
丸め処理などデフォルトの挙動を取得するには(+ defaultBehavior)メソッドを使用します。セットする場合はNSDecimalNumberHandlerを作成して(+ setDefaultBehavior)メソッドでセットします。
デフォルトの挙動を変えるサンプル
Objective-C
#pragma mark NSDecimalNumber setDefaultBehavior: -(void)method028 { NSDecimalNumber *dNum1 = [NSDecimalNumber decimalNumberWithString:@"100"]; NSDecimalNumber *dNum2 = [NSDecimalNumber decimalNumberWithString:@"3"]; NSDecimalNumber *dNum3 = [dNum1 decimalNumberByDividingBy:dNum2 withBehavior:[NSDecimalNumber defaultBehavior]]; NSLog(@"%s %@",__FUNCTION__,[dNum3 description]); //-[OOOAppDelegate method028] 33.333333333333333333333333333333333333 NSDecimalNumberHandler *handler = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundDown scale:3 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; [NSDecimalNumber setDefaultBehavior:handler]; NSDecimalNumber *dNum4 = [dNum1 decimalNumberByDividingBy:dNum2 withBehavior:[NSDecimalNumber defaultBehavior]]; NSLog(@"%s %@",__FUNCTION__,[dNum4 description]); //-[OOOAppDelegate method028] 33.333 }
十進数の比較
レシーバと別の十進数オブジェクトを比較するには(– compare)を使用します。intとfloatとタイプが違っても数値が同じであれば同じだと判断されます。
十進数オブジェクトの比較
Objective-C
#pragma mark NSDecimalNumber compare: -(void)method027 { NSNumber *integerNumber = [NSNumber numberWithInteger:123456]; NSDecimal decimalValue1 = [integerNumber decimalValue]; NSDecimalNumber *dNum1 = [NSDecimalNumber decimalNumberWithDecimal:decimalValue1]; NSNumber *floatNumber = [NSNumber numberWithFloat:123456]; NSDecimal decimalValue2 = [floatNumber decimalValue]; NSDecimalNumber *dNum2 = [NSDecimalNumber decimalNumberWithDecimal:decimalValue2]; switch ([dNum1 compare:dNum2]) { case NSOrderedAscending: NSLog(@"NSOrderedAscending"); break; case NSOrderedSame: NSLog(@"NSOrderedSame"); break; case NSOrderedDescending: NSLog(@"NSOrderedDescending"); break; default: break; } //NSOrderedSame }
最大値と最小値を取得
十進数オブジェクトが扱うことのできる最大値を取得するには(+ maximumDecimalNumber)メソッドを使います。十進数オブジェクトが扱うことのできる最小値を取得するには(+ minimumDecimalNumber)メソッドを使います。
適合するプロトコル
メソッド
十進数オブジェクトの作成
+ decimalNumberWithDecimal:
十進数から十進数オブジェクトを作って返します
+ decimalNumberWithMantissa:exponent:isNegative:
十進数オブジェクトを仮数、ベキ指数で作って返します
+ decimalNumberWithString:
十進数オブジェクトを文字から作って返します
+ decimalNumberWithString:locale:
十進数オブジェクトを文字から作って返します
+ one
十進数オブジェクトの1を作って返します
+ zero
十進数オブジェクトの0を作って返します
+ notANumber
「数字でない」十進数オブジェクトを作って返します
十進数オブジェクトの初期化
– initWithDecimal: 指名イニシャライザ
十進数オブジェクトを初期化して返します
– initWithMantissa:exponent:isNegative:
十進数オブジェクトを仮数、ベキ指数で初期化して返します
– initWithString:
数字を表す文字列から十進数オブジェクトを初期化して返します
– initWithString:locale:
十進数オブジェクトを文字から初期化して返します
計算の実行
– decimalNumberByAdding:
十進数オブジェクトを加算した結果を返します
– decimalNumberBySubtracting:
十進数オブジェクトを減算した結果を返します
– decimalNumberByMultiplyingBy:
十進数オブジェクトを乗算した結果を返します
– decimalNumberByDividingBy:
十進数オブジェクトを除算した結果を返します
– decimalNumberByRaisingToPower:
十進数オブジェクトを累乗(2乗や、3乗など)した結果を返します
– decimalNumberByMultiplyingByPowerOf10:
十進数オブジェクトに10の累乗を乗算した結果を返します
– decimalNumberByAdding:withBehavior:
十進数オブジェクトを加算した結果を返します
– decimalNumberBySubtracting:withBehavior:
十進数オブジェクトを減算した結果を返します
– decimalNumberByMultiplyingBy:withBehavior:
十進数オブジェクトを乗算した結果を返します
– decimalNumberByDividingBy:withBehavior:
十進数オブジェクトを除算した結果を返します
– decimalNumberByRaisingToPower:withBehavior:
累乗して丸めた十進数オブジェクトを返します
– decimalNumberByMultiplyingByPowerOf10:withBehavior:
10の累乗をかけて丸めた十進数オブジェクトを返します
丸め
– decimalNumberByRoundingAccordingToBehavior:
指定の丸め挙動で丸めた十進数オブジェクトを返します
値にアクセスする
– decimalValue
レシーバのNSDecimal値(読み込みのみ)
– doubleValue
十進数オブジェクトの近似値のdouble数値(読み込みのみ)
– descriptionWithLocale:
レシーバーの内容を表現する文字列を返します
– objCType
レシーバのObjective-Cタイプ文字列を返します
挙動の管理
+ defaultBehavior
初期設定の丸め動作(四捨五入・切り上げ・切り捨て)を返します
+ setDefaultBehavior:
デフォルトの丸め方法をセットします
十進数オブジェクトの比較
– compare:
十進数オブジェクトを比較して結果を返します
最大と最小の十進数オブジェクトを取得
+ maximumDecimalNumber
最大の十進数オブジェクトを返します
+ minimumDecimalNumber
最小の十進数オブジェクトを返します
編集時のバージョン
OS X 10.11
Swift2.0