macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSNumberFormatterクラス

INDEX>Foundation>

apple(OS X)
apple(iOS)

日本語表記ルールブック

日本語表記ルールブック

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 2.0以降
定義 NSNumberFormatter.h

OS X
developer.apple.com

iOS
developer.apple.com

watchOS
developer.apple.com

tvOS
developer.apple.com

概要

適合するプロトコル

本クラスについて

数字を指定した形式に整形します。数字は古くから使われているだけでなく地域に密着した使い方がされてきました。ですから同じ数字を表現するにも言語環境などによって様々な表現をすることが必要になってきます。桁区切り記号についても日本では通常「,」を使い、3桁ごとに区切っていくのですが、フランスなどでは記号に「.」を使うようになっているようです。日本では4桁区切りの方が千万億兆の区切りで読みやすい場合もあります。漢数字もつかえますし。

2340という数字を日本語環境なら「2,340」「二千三百四十」「234,000%」「2.34E3」といった形式に置き換えることができます。
ちなみに「九十九京九千九百九十九兆九千九百九十九億九千九百九十九万九千九百三十五」までは正しく表示されましたが、以降は「九十九京」と、省略表示されました。

また逆に「二千三百四十」という文字列から「2340」という数字に変換する事もできます。小数点を含む数字などは「三十・三一九九九」などと表記されている文字列を「30.31999」と変換することができます。

フォーマッターの挙動とスタイルを設定する

フォーマッターの挙動を指定するには(– setFormatterBehaviorメソッドを使います。OS Xでは以前の形式と10.4以降の形式があり少し挙動が違うのですが、iOSではOS X10.4形式しか使えないのであまり意味は無いです。(– formatterBehaviorメソッドで現在の挙動を得ることができます。デフォルトの挙動をセットするには(+ setDefaultFormatterBehaviorメソッドを使います。現在のデフォルトの挙動を知るには(+ defaultFormatterBehaviorメソッドを使います。

文字列を数値にして返すメソッドを使う場合に十進数ナンバーオブジェクトNSDecimalNumberかナンバーオブジェクトNumberかどちらを返すかの指定が(– setGeneratesDecimalNumbersメソッドでできます。YESならNSDecimalNumber、NOならNSNumberオブジェクトとして返されます。小数点を含む計算は精度の高いNSDecimalNumberオブジェクトを使った方がよいでしょう。現在の設定を知るには(– generatesDecimalNumbersメソッドを使います。

数値を変換スタイルをセットするには(– setNumberStyleメソッドを使います。現在の変換スタイルを知るには(– numberStyleメソッドを使います。

●変換スタイルの定数
NSNumberFormatterNoStyle
スタイルなし
NSNumberFormatterDecimalStyle
十進数スタイル
NSNumberFormatterCurrencyStyle
通貨スタイル 2,340
NSNumberFormatterPercentStyle
パーセントスタイル 234,000%
NSNumberFormatterScientificStyle
指数スタイル 2.34E3 
NSNumberFormatterSpellOutStyle
スペルアウトスタイル 二千三百四十

数字と文字列を変換する

実際に変換する方法ですが、文字列から数字に変換するには(– numberFromStringメソッドを使用します。逆に数字から文字列に変換するには(– stringFromNumberメソッドを使用します。他には指定の文字列から数字を得るメソッド– getObjectValue:forString:range:error)や(+ localizedStringFromNumber:numberStyleメソッドを使って変換できます。

ローカライズの管理

前述したように、数値を文字列に変換する方法は、言語環境によって大きく結果が異なります。その言語環境を表すのがロケールです。ロケールをセットするには(– setLocaleメソッドを使います。現在のロケールを得るには(– localeメソッドを使います。

丸め挙動の設定

「丸め」とはある桁で四捨五入、切り上げ、切り捨てを行う事です。
丸め方法を設定するには(– setRoundingModeメソッドを使います。現在の丸めモードを知るには(– roundingModeメソッドを使います。
●丸めモード
NSNumberFormatterRoundCeiling
最大の値、値が増える方向に修正。1.23であれば1.3、-1.23であれば1.2
NSNumberFormatterRoundFloor
最低の値、値が減る方向に修正。1.23であれば1.2、-1.23であれば-1.3
NSNumberFormatterRoundDown
切り捨て
NSNumberFormatterRoundUp
切り上げ
NSNumberFormatterRoundHalfEven
四捨五入(4まで切り捨て、6から切り上げ。5の場合は偶数になるようにと説明されていますが、1.85のとき偶数になりますね?)
1.24->1.2 , 1.25->1.2 , 1.26->1.3 , 1.34->1.3 , 1.35->1.4 , 1.36->1.4
1.74->1.7 , 1.75->1.8 , 1.76->1.8 , 1.84->1.8 , 1.85->1.9 , 1.86->1.9

NSNumberFormatterRoundHalfDown
四捨五入(5まで切り捨て…五捨六入ですね)
1.24->1.2 , 1.25->1.2 , 1.26->1.3 , 1.34->1.3 , 1.35->1.4 , 1.36->1.4
1.74-> 1.7, 1.75->1.7 , 1.76->1.8 , 1.84->1.8 , 1.85->1.9 , 1.86->1.9

NSNumberFormatterRoundHalfUp
四捨五入
1.24->1.2 , 1.25->1.3 , 1.26->1.3 , 1.34->1.3 , 1.35->1.4 , 1.36->1.4
1.74->1.7 , 1.75->1.8 , 1.76->1.8 , 1.84->1.8 , 1.85->1.9 , 1.86->1.9

数字のフォーマット

正の値のフォーマットを行うには(– setPositiveFormatメソッドを使います。現在のフォーマットを得るには(– positiveFormatメソッドを使います。負の値のフォーマットを行うには(– setNegativeFormat)を使います。現在のフォーマットを得るには(– negativeFormat)を使います。

数値記号

数値記号もカスタマイズすることができます。パーセント記号の設定は(– setPercentSymbolメソッドを使い、現在設定されているパーセント記号を得るには(– percentSymbolメソッドを使います。千分の一の記号であるパーミルの設定には(– setPerMillSymbolメソッドを使い、取得には(– perMillSymbolメソッドを使います。

プラス記号の設定は(– setPlusSignメソッドを使い、取得には(– plusSignメソッドを使います。マイナス記号は(– setMinusSign)(– minusSignメソッドを使います。
指数記号は(– setExponentSymbol)と(– exponentSymbolメソッドを使います。

ゼロである事を示す記号は(– setZeroSymbol)(– zeroSymbolメソッドを使い、nilである事を示す記号は(– setNilSymbol)(– nilSymbolメソッドを使います。
同様に非数値記号は(– setNotANumberSymbol)(– notANumberSymbol)、正の無限大記号は(– setPositiveInfinitySymbol)(– positiveInfinitySymbol)、負の無限大記号は(– setNegativeInfinitySymbol)(– negativeInfinitySymbolメソッドを使います。

通貨のフォーマットの設定

通貨で使われる記号も設定できます。"¥"などの通貨記号は(– setCurrencySymbol)(– currencySymbolメソッド、"JPY"などの通貨コードは(– setCurrencyCode)(– currencyCode)です。
通貨で使う区切り文字は日本では通常「,」ですが、これも変更することができます。セットするには(– setCurrencyGroupingSeparatorメソッドを、取得するには(– currencyGroupingSeparatorメソッドを使います。

前付文字と後付文字

ドルを表記する場合は$1,000,000とドル記号が数字の前に付きますが、日本円では1,000,000円と数字の後に付きます。これを設定するのが以下のメソッドです。正の場合、負の場合と前付き後付きそれぞれの場合があります。
正の数の場合の前付文字(– setPositivePrefix)(– positivePrefix
正の数の場合の後付文字(– setPositiveSuffix)(– positiveSuffix
負の数の場合の前付文字(– setNegativePrefix)(– negativePrefix
負の数の場合の後付文字(– setNegativeSuffix)(– negativeSuffix

数字を表示する時の設定

マイナスの場合には赤字で表記したいなど、文字属性を条件に応じて付加して返す事もできます。
負の数の場合のテキストの属性(– setTextAttributesForNegativeValues)(– textAttributesForNegativeValues
正の数の場合のテキストの属性(– setTextAttributesForPositiveValues)(– textAttributesForPositiveValues
零の場合のテキストの属性(– setTextAttributesForZero)(– textAttributesForZero
Nilの場合のテキストの属性(– setTextAttributesForNil)(– textAttributesForNil
N/Aのテキストの属性(– setTextAttributesForNotANumber)(– textAttributesForNotANumber
正の無限大の場合のテキストの属性(– setTextAttributesForPositiveInfinity)(– textAttributesForPositiveInfinity
負の無限大の場合のテキストの属性(– setTextAttributesForNegativeInfinity)(– textAttributesForNegativeInfinity

セパレータやグループのサイズの設定

桁区切りの記号も日本などでは「,」がデフォルトですが、ロケールが"fr-FR"だと「.」がデフォルトの桁区切り記号になります。独自に設定するには(– setGroupingSeparator)、現在の設定を取得するには(– groupingSeparatorメソッドを使います。
桁区切りを使うかどうかも(– setUsesGroupingSeparatorメソッドでセットできます。YESをセットすると桁区切り記号が挿入されます(– usesGroupingSeparatorメソッドで現在の設定状況を知ることができます。
通貨の桁区切り記号は別に設定することができます。(– setCurrencyDecimalSeparator)(– currencyDecimalSeparator
桁区切りを何桁で行うのかの設定もできます。通常は3桁ですが4桁などに変更する事もできます。
– setGroupingSize)(– groupingSize

第二桁区切りサイズ。日本などでは使用しませんが、ロケールが"hi-IN"だと上位の桁区切りサイズが変わります。123456789を@"#,##円"で変換した場合 १२,३४,५६,७८९円となります。(– setSecondaryGroupingSize)(– secondaryGroupingSize

小数点記号も日本などでは「.」がデフォルトですが、ロケールが"fr-FR"だと「,」がデフォルトの桁区切り記号になります。独自に設定するには(– setDecimalSeparatorメソッドを使い、現在の設定を取得するには(– decimalSeparatorメソッドを使います。
常に小数点を表示させておくかどうかの設定は(– setAlwaysShowsDecimalSeparator)を使います。現在の設定の取得は(– alwaysShowsDecimalSeparator)です。

数字のパディング

連番の表示などで0001、0002、0003と表示したい場合がありますが、このような形に整形して返す事も可能です。(– setMinimumIntegerDigitsメソッドを使います。10という数値に対してsetMinimumIntegerDigitsで4を与えると0010という文字列で返されるようになります。10000なら10000で返されます。
10という数値に対してsetMinimumIntegerDigitsで4を与えると000010という文字列で返されるようになります。10000なら010000で返されます。
指定の桁数まで0で埋める感じです。現在の設定を取得するには(– minimumIntegerDigitsメソッドを使います。

逆に下○桁だけ欲しいという場合には(– setMaximumIntegerDigitsメソッドを使います。
10という数値に対してsetMaximumIntegerDigitsで6を与えると10という文字列で返されるようになります。10000なら10000で返されます。
10という数値に対してsetMaximumIntegerDigitsで4を与えると10という文字列で返されるようになります。10000なら0000で返されます。
指定の桁数より上の位を切ってしまう感じです。現在の設定を取得するには(– maximumIntegerDigitsメソッドを使用します。
小数点以下の桁に対しても同じような事を行うメソッドがあります。(– setMinimumFractionDigits)(– setMaximumFractionDigits)で、取得するメソッドは(– minimumFractionDigits)(– maximumFractionDigits)です。

メソッド

Managing Leniency Behavior

– setLenient
– isLenient

サブクラス化の注意