常にドットの後に2桁の小数桁がある123.00のような単純な形式でNSDecimalNumberを作成しようとしています。NSFormatterや、文字列からfloatを変換し、この文字列からNSDecimalNumberを作成するなど、他の多くの方法を試してみましたが、機能しません。問題は、NSStringやその他の形式ではなく、この形式のNSDecimalNumberのみが必要なことです。アドバイスありがとうございます、ポール
4 に答える
たぶん、分数の後に 2 桁だけの NSNumberDecimalを格納しようとしていたのでしょうか? もしそうならNSDecimalNumberBehaviors
あなたの友達です。同様のニーズがあり、以下を使用しました。
self.decimalHandlingBehaviorForApp = [NSDecimalNumberHandler
decimalNumberHandlerWithRoundingMode:NSRoundUp
scale:2 raiseOnExactness:NO
raiseOnOverflow:NO raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
編集:それを使用する例を追加
// update the taxable total first
self.cartTaxableTotal = [self.cartTaxableTotal decimalNumberByAdding:itemAdded.priceOfItem
withBehavior:self.decimalHandlingBehaviorForApp];
以下のように2回の型キャスト操作を行うだけでよいと思います
float value = 123.562;
int myDigit = value;
myDigit変数に値123を与えます
NSLog(@"MyDigit in Decimal = %d",myDigit);
出力は 10 進数の MyDigit = 123 です。
123.000 のような出力が必要な場合は、次のように記述します。
float valueWithZiro = myDigit;
NSLog(@"MyDigit with 000 == %3f",valueWithZiro);
出力は 10 進数の MyDigit = 123.000 です。
このことからアイデアが得られるかもしれません。
float num = 123.1254546;
NSString *str = [NSString stringWithFormat:@"%.2f",num];
NSLog(@"%.2f %@",num,str);
NSNumber と同様に、NSDecimalNumber にはフォーマット情報を含めることはできません。オブジェクト構造は単にそれをサポートしていません。これは数値を表すものであり、数値の表示方法ではありません。
それをフォーマットされた NSString に変換できます(これは望ましくないと言います)。しかし、あなたはあなたが求めていることをすることはできません。
NSNumberFormatter を使用して、フォーマットされた NSString に変換します。これは、小数点と桁区切り記号、表示する小数点以下の桁数、通貨記号などを指定できるオブジェクトです。