[Objective-C] 小数点を丸める!(数値変換)
公開日:
:
最終更新日:2014/08/20
iPhone App 開発, Objective-C
小数点を含む数値
Objective-Cに限らず、小数点を含む数値を計算する場合はdoubleやfloatなどを使用した誤差が生じることがあります。
詳しくは以下のリンクを参考に。
http://msdn.microsoft.com/ja-jp/library/c151dt3s(v=vs.80).aspx
厳密な計算はNSDecimalNumberを使用します。その上で、浮動小数点がある場合には小数点を丸める処理が必要です。
文字列から指定の小数点で丸める
+ (NSDecimalNumber *)convertScaleWithDecimalNumber:(NSString *)aNumber scale:(NSInteger)aScale { if (aNumber == nil) return [[NSDecimalNumber alloc] initWithString:@"0"]; NSDecimalNumber *decimalValue = [[NSDecimalNumber alloc] initWithString:aNumber]; NSDecimalNumberHandler *roundingStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:aScale raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; return [decimalValue decimalNumberByRoundingAccordingToBehavior:roundingStyle]; }
3行目:文字列チェックをし、nilの場合は0を返却します。
4行目:文字列をNSDecimalNumberに変換します。
5〜10行目:decimalNumberHandlerWithRoundingModeで数値を丸めます。
第1引数 | roundingMode | 丸めモードNSRoundPlain:四捨五入 NSRoundDown:切り下げ NSRoundUp:切り上げ |
第2引数 | scale | 丸めた結果の桁数 |
第3引数 | raiseOnExactness | 精度が狂った場合、エラーを発生させるか |
第4引数 | raiseOnOverflow | オーバーフロー場合、エラーを発生させるか |
第5引数 | raiseOnUnderflow | アンダーフローした場合、エラーを発生させるか |
第6引数 | raiseOnDivideByZero | 0で除算した場合、エラーを発生させるか |
数値から指定の小数点で丸める
+ (NSDecimalNumber *)getScaleWithDecimalNumber:(NSDecimalNumber *)aNumber scale:(NSInteger)aScale { NSDecimalNumberHandler *roundingStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:aScale raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; return [aNumber decimalNumberByRoundingAccordingToBehavior:roundingStyle]; }
ad
関連記事
-
-
[Swift] 画像を合成する
画像を合成 以下の2つの画像を合成してみます。円と四角です。 画像をプロジェクトに追
-
-
[Objective-C] 文字列操作の便利Tips
Tipsいろいろ 先日の投稿 共通関数をまとめたクラスを作ろう!の流れで、文字列を操作するときに便
-
-
OSSの使い方がわからない・・・。
チュートリアル系の、storyboradでview controllerを置いて画面遷移を設定してっ
-
-
[Swift] frameworkについて
先日、Swiftで実装されたライブラリをまとめたサイトを発見しました。 Swift Toolb
-
-
iPhoneApp WorkManager公開されました!
きっとリジェクトされるんだろうなと思いながら申請を出して1週間。 本日、公開のメールが届きまし
-
-
[Swift] プロパティリスト(plist)の値を取得
plistからデータを取得してみます。 こちらのエントリーも参考にしてみてください。 プロパテ
-
-
[Swift] UITableViewのセルにアクションを設定する
セル選択→アクション UITableViewControllerを使用したテーブルビューの画面があ
-
-
[Objective-C] バージョン更新時に変更内容をアラートで出力する
アプリの更新内容を表示したい! バージョン更新時に変更内容を表示させたいのは、ユーザーがいちいちA
-
-
[Swift] プロパティリスト(plist)を使ってCoreDataで一括登録する
プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト
-
-
[Objective-C] iPhoneアプリからのメーラー起動
今回はiPhoneアプリからメーラーを起動する処理を紹介します。 メーラー起動のコントローラー