我正在尝试在ObjectiveC中为iphone编写应用程序。我需要显示一个statustext,告诉用户一些变量的值。通过在图表中用手指拖动标记,可以更改这些值。 我遇到的问题是价值范围很广。如果要设置0到1之间的值,则可能需要3位小数(如0.345)。但是如果范围是0到10000,则根本不需要任何小数。
我现在有大约20条可以显示的不同消息,如果我希望它们全部“动态”显示值,那么会有很多这样的代码:
float start,stop; // Defined earlier...
switch ( numberOfDecimals ) {
case 0:
lblStatus.text = [NSString stringWithFormat:@"Start: %.0f Stop :%.0f", start, stop]; break;
case 1:
lblStatus.text = [NSString stringWithFormat:@"Start: %.1f Stop :%.1f", start, stop]; break;
case 2:
lblStatus.text = [NSString stringWithFormat:@"Start: %.2f Stop :%.2f", start, stop]; break;
default: break;
}
有没有更好的方法呢?
答案 0 :(得分:1)
使用NSNumberFormatter
。这就是它的用途。
答案 1 :(得分:0)
使用格式字符串构建格式字符串。
NSString* MyFormatString = [NSString stringWithFormat:@"Start :%%.%df Stop :%%.%df",
numberOfDecimals,
numberOfDecimals];
[NSString stringWithFormat:MyFormatString, start, stop]; break;
答案 2 :(得分:0)
如果有人关心,这是我在咨询NSNumberFormatter的文档后想出来的:
float start,stop;
NSNumberFormatter *formatter;
// Setup the formatter
formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle ];
[formatter setMaximumFractionDigits: numberOfDecimals ];
lblStatus.text = [NSString stringWithFormat:@"Start: %@ Stop:%@",
[formatter stringFromNumber: [NSNumber numberWithFloat: start]],
[formatter stringFromNumber: [NSNumber numberWithFloat: stop ]]];
不确定它是否是最优雅或最有效的解决方案,但它可以工作并且看起来更好。
答案 3 :(得分:0)
简单。将switch
语句替换为:
lblStatus.text = [NSString stringWithFormat:@"Start: %.*f Stop :%.*f", numberOfDecimals, start, numberOfDecimals, stop];