是否有双字符串格式化程序?

时间:2012-11-12 09:05:48

标签: objective-c cocoa nsnumberformatter

我正在寻找一种方法来表示符合以下格式要求的NSString中的双重值:

1。)没有尾随零:x = 0.5000000 - > @" 0.5"

2。)至少在十进制上:x = 45 - > @" 45.0"

3.)最多8个十进制字符(最后一个舍入):x = 0.000000005 - > @" 0.00000001"

我试过@"%。8f",@"%g"或@"%。8g"但至少有一项要求都失败了。

我想我可以用@"%。8f"然后将以字符串的最后一个字符开头的字符串的字符循环到前面,删除" 0"字符,

或以"%。8g"开始并附加" .0"如果字符串不包含小数点。

有没有更智能的解决方案?

1 个答案:

答案 0 :(得分:4)

您可以使用数字格式化程序执行此操作,但您需要首先使用双倍格式创建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