Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

[Objective-C] 小数点を丸める!(数値変換)

公開日: : 最終更新日:2014/08/20 iPhone App 開発, Objective-C


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

小数点を含む数値

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] UITabBarControllerでタブ選択時のイベントを取得する

UITabBarController タブを使った画面を作成する場合はUITabBarContro

記事を読む

no image

一旦、離脱中!

サイト制作の仕事がちょろちょろちょろっと入ってきたので、寂しいけれどしばしXcodeとはお別れ。

記事を読む

[iPhone App] WorkManagerの不具合について

バージョン1.2.2の不具合 11/25日現在、iPhoneアプリの「WorkManger」バージ

記事を読む

[Swift] UINavigationControllerで戻るイベントを取得する

UINavigationController UINavigationControllerを使用し

記事を読む

[Swift] UITableViewのセルにアクションを設定する

セル選択→アクション UITableViewControllerを使用したテーブルビューの画面があ

記事を読む

[Swift] プロパティリスト(plist)を使ってCoreDataで一括登録する

プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト

記事を読む

[iPhone App] WorkManager 1.2.0版がリリースされました。

新機能 以前から要望などが多かったものを元に、機能を追加いたしました。 新バージョンで追加された

記事を読む

[Swift] CoreDataを使ってみる

SwiftでCoreData 今回はSwiftでCoreDataを使ってみます。 Xcodeプロ

記事を読む

[Swift] 画像を合成する

画像を合成 以下の2つの画像を合成してみます。円と四角です。 画像をプロジェクトに追

記事を読む

[iPhone App]WorkManager アップデートしました。

Processing For App Storeでやきもきした僕です。こんにちわ。 今

記事を読む

ad

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ad

[PHP] curl転送してみる(googleに)

curlでgoogle画像検索APIにアクセスしてみます。 cu

[PHP] PDOでMySQLの接続確認をする

PDO PHPでMySQLに接続する際には、mysql_connec

[PHP] ランダムな英数字を生成する

便利系メソッド 今回はPHPでランダムな英数字を作成してみます。

[Swift] プロパティリスト(plist)の値を取得

plistからデータを取得してみます。 こちらのエントリーも参考にし

[Swift] Asset Catalogについて

XCode5から追加されたAsset Catalog。 いままで標準

→もっと見る

  • 1978年の七夕生まれ。 25才でweb業界の門を叩き、28才でフリーランスに。 現在は、フリーランスでマークアップ中心に、wordpressのカスタマイズやデザインをしております。 また、iPhoneアプリの開発もしております。

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
PAGE TOP ↑

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524