【问题标题】:Formatting floats in Objective C在 Objective C 中格式化浮点数
【发布时间】:2012-05-10 03:08:47
【问题描述】:

我需要将浮点数(吸引人的标题,他?)格式化为 2 位小数,但前提是这些小数位的值不为零。示例:

我有一个名为“answer”的 NSTextField,在使用几个浮点数进行数学运算后,我想将“answerFloat”变量分配给“answer”NSTextField。到目前为止,我得到了:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

但这会将 45 设置为 45.00。我希望整数显示时不带零,任何十进制数都显示为各自的十进制值。

在将其提供给 stringWithFormat 之前,我是否需要进行某种检查?或者 NSString 是否提供了一种方法来处理这个问题?

【问题讨论】:

    标签: objective-c string cocoa formatting floating-point


    【解决方案1】:

    您是否尝试过%g 格式说明符?

    NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);
    

    2010-01-12 19:54:38.651 foo[89884:10b] 45, 45.5

    【讨论】:

    • 我实际上以为我已经尝试过 %g。我只是这样尝试: [answer setStringValue:[NSString stringWithFormat:@"%2.02g", answerFloat]];它就像一个魅力。谢谢!
    • 问题在于,如果数字足够大,它将以指数形式出现。我认为没有一种方法可以仅使用格式字符串而不冒指数形式的风险来要求这种行为。
    【解决方案2】:

    %g 的问题在于它没有办法指定舍入增量(至少,我找不到)。

    您可以像这样使用 NSNumberFormatter 来获得具有未定义小数位数的数字的结果。

    double none = 5;
    double one = 5.1;
    double two = 5.01;
    double lots = 5.918286558251858392107584219;
    
    NSNumber *numberNone = [NSNumber numberWithDouble:none];
    NSNumber *numberOne = [NSNumber numberWithDouble:one];
    NSNumber *numberTwo = [NSNumber numberWithDouble:two];
    NSNumber *numberLots = [NSNumber numberWithDouble:lots];
    
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];
    formatter.numberStyle = NSNumberFormatterDecimalStyle;
    
    NSLog(@"%@",[formatter stringFromNumber:numberNone]);
    NSLog(@"%@",[formatter stringFromNumber:numberOne]);
    NSLog(@"%@",[formatter stringFromNumber:numberTwo]);
    NSLog(@"%@",[formatter stringFromNumber:numberLots]);
    

    输出:

    2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 5
    2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.1
    2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.01
    2012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92
    

    【讨论】:

    • 马克,出色的答案并解决了我多年来一直试图解决的问题,谢谢 ;-)
    【解决方案3】:

    查找 NSNumberFormatter。

    【讨论】:

    • 我只是想说我认为你的名字规则。真棒 NSJoke。
    • 这很适合我以前在 Apple 做的工作。
    • 请提供适当的帮助并可能提供示例。如果你的名字是 NSResponder,那就更是如此!感谢您的合作。
    【解决方案4】:

    为了获得最大的灵活性,您可以考虑实施custom subclass of NSFormatterData Formatting Programming Guide for Cocoa 中可能还有其他重要提示。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多