【问题标题】:Is there a string formatter available for double?是否有可用于双精度的字符串格式化程序?
【发布时间】:2012-11-12 09:05:47
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c cocoa nsnumberformatter


    【解决方案1】:

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

    【讨论】:

    • @AnoopVaidya:谢谢。 :)
    • 嗨,这看起来像是要走的路!非常感谢您快速而完整的回答!
    • 您好,不客气。这就是我们在这里的目的:互相帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2023-03-03
    • 2012-08-25
    • 2021-08-02
    • 1970-01-01
    • 2016-09-03
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多