Ada*_*tle 33 string floating-point formatting cocoa objective-c
我需要将一个浮点数(引人注目的标题,他?)格式化为2位小数,但前提是这些小数位的值不是零.例:
我有一个名为'answer'的NSTextField,在我用几个浮点数进行数学运算之后,我想将'answerFloat'变量赋给'answer'NSTextField.到目前为止我有:
[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];
Run Code Online (Sandbox Code Playgroud)
但这设置了45到45.00之类的东西.我想要显示没有零的整数,以及要显示的十进制数和它们各自的十进制值.
在将它提供给stringWithFormat之前,是否需要运行某种检查?或NSString提供了一种方法来处理这个问题?
Mar*_*sey 45
你试过%g
格式说明符吗?
NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);
Run Code Online (Sandbox Code Playgroud)
2010-01-12 19:54:38.651 foo [89884:10b] 45,45.5
Mar*_*man 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]);
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)