Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

NSDecimalNumberクラス

INDEX>Foundation>NSDecimalNumber

apple(mac)
apple(iOS)

解説

十進数オブジェクト



OS X

継承 NSNumber : NSValue : NSObject
準拠 NSCopying (NSValue)
NSSecureCoding
NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 Mac OS X v10.0以降
iOS 2.0以降
定義 NSDecimalNumber.h

OS X
developer.apple.com

iOS
developer.apple.com


イデアコ ゴミ箱 チューブラー ブラック

イデアコ ゴミ箱 チューブラー ブラック


概要

十進数を表すオブジェクトです。四則計算や累乗、オブジェクト同士の比較などができます。丸め処理(四捨五入・切り上げ・切り捨て)などの挙動をカスタマイズすることができます。

十進数オブジェクトの作成

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