浮动的“动态”显示?

时间:2011-04-19 23:25:39

标签: objective-c ios floating-point floating-accuracy

我正在尝试在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;
} 

有没有更好的方法呢?

4 个答案:

答案 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];