Objective c 是否有适用于double的字符串格式化程序?

Objective c 是否有适用于double的字符串格式化程序?,objective-c,cocoa,nsnumberformatter,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”

我正在寻找一种在满足以下格式要求的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”


是否有更智能的解决方案可用?

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

@阿诺普瓦迪亚:谢谢。:)嗨,这看起来是该走的路!非常感谢您快速完整的回答!嗨,不客气。这就是我们在这里的目的:互相帮助!