我正在寻找一种方法来表示符合以下格式要求的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"如果字符串不包含小数点。
有没有更智能的解决方案?
答案 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