3

次の形式要件を満たすNSStringでdouble値を表す方法を探しています。

1.)後続ゼロなし:x = 0.5000000-> @ "0.5"

2.)少なくとも10進数:x = 45-> @ "45.0"

3.)最大8桁の小数点以下の文字(最後の1つは丸められます):x = 0.000000005-> @ "0.00000001"

@ "%。8f"、@ "%g"、または@ "%。8g"で試しましたが、少なくとも1つの要件ですべて失敗しました。

@ "%。8f"を使用して、文字列の最後の文字で始まる文字列の文字を先頭にループし、「0」の文字を削除することができると思います。

または、文字列に小数点が含まれていない場合は、「%。8g」で開始し、「。0」を追加します。

よりスマートなソリューションはありますか?

4

1 に答える 1

4

これは数値フォーマッタを使用して行うことができますが、最初にdoubleを使用してNSNumberを作成する必要があります。

NSNumber *halfNumber            = [NSNumber numberWithDouble:0.5000000];    
NSNumber *wholeNumber           = [NSNumber numberWithDouble:45];           
NSNumber *longNumber            = [NSNumber numberWithDouble:0.000000005];  

NSNumberFormatter *formatter    = [NSNumberFormatter new];
formatter.numberStyle           = NSNumberFormatterDecimalStyle;
formatter.roundingMode          = NSNumberFormatterRoundHalfUp;
formatter.minimumFractionDigits = 1;
formatter.maximumFractionDigits = 8;

NSString *halfString            = [formatter stringFromNumber:halfNumber];
NSString *wholeString           = [formatter stringFromNumber:wholeNumber];
NSString *longString            = [formatter stringFromNumber:longNumber];

NSLog(@"%@", halfString);
NSLog(@"%@", wholeString);
NSLog(@"%@", longString);

// Output is:
// 2012-11-12 04:22:41.181 Testing App[48069:fb03] 0.5
// 2012-11-12 04:22:41.182 Testing App[48069:fb03] 45.0
// 2012-11-12 04:22:41.183 Testing App[48069:fb03] 0.00000001
于 2012-11-12T09:24:09.527 に答える