我需要将float(引人注目的标题,他?)格式化为2位小数,但前提是这些小数位的值不为零。例如:
我有一个名为'answer'的NSTextField,在我用几个浮点数进行数学运算后,我想将'answerFloat'变量赋给'answer'NSTextField。到目前为止我已经:
[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];
但这设置了45到45.00之类的东西。我想要显示整数而不显示零,并且要显示任何十进制数字及其各自的十进制值。
在将它提供给stringWithFormat之前,是否需要运行某种检查?或者NSString是否提供了解决此问题的方法?
答案 0 :(得分:44)
您是否尝试过%g
格式说明符?
NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);
2010-01-12 19:54:38.651 foo [89884:10b] 45,45.5
答案 1 :(得分:23)
%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
答案 2 :(得分:3)
查找NSNumberFormatter。
答案 3 :(得分:2)
为了获得最大的灵活性,您可以考虑实施custom subclass of NSFormatter。 Data Formatting Programming Guide for Cocoa中可能还有其他重要提示。