0

我试图在我的 NSString 中指定我的浮点数的准确性,但我不断收到此错误:

格式指定类型“双”,但参数的类型为“NSString *”

这是我的代码:

NSString *tmplabel = [tmp description];
temp.text = [NSString  stringWithFormat: @"%.fº", tmplabel];

我究竟做错了什么?

4

4 回答 4

3

你的 tmplabel 是一个NSString,它应该是一个double.

如果您确定 tmplabel 包含一个可以解析为简单双精度的数字,那么您可以直接使用doubleValue它。否则,您可能需要通过错误处理等进行更精细的转换。

这是一个脚踏实地的简单方法:

temp.text = [NSString  stringWithFormat: @"%.fº", [tmplabel doubleValue]];

doubleValue方法(及其近亲integerValue和类似方法)解释字符串的内容,如果可以将字符串的开头读取为数字,它将为您转换它并将其作为适当的原始类型返回。在您的情况下,原始类型是double.

您不能将类型从对象(任何 NS*)转换为原始类型,但总是必须经过某种解释或程序转换。

最后,请注意,doubleValue直接在用户输入上使用是一种快捷方式,您将在某个时候重新访问它,因此请记住使用数字格式化程序或NSScanner更高版本重新实现它。要了解原因,请尝试输入非数字数据,看看您是否对结果满意。

最后,要按照您的要求实际设置精度(即小数点后的小数位数),请参阅下面的王子答案DharaParekh 的

于 2013-05-14T11:11:36.390 回答
2

尝试这个

NSString *tmplabel = [tmp description];
temp.text = [NSString  stringWithFormat: @"%.f", [tmplabel doubleValue]];
于 2013-05-14T11:15:23.597 回答
2

尝试这个:

NSString *tmplabel = [tmp description];
float tmp = [tmplabel floatValue];
temp.text = [NSString  stringWithFormat: @"%.1f", tmp];
于 2013-05-14T11:17:06.703 回答
0
{
temp.text = [NSString  stringWithFormat: @"%.1f", tmplabel];
}

您可以更改 f 前面的数字以指定精度。

于 2013-05-14T12:23:21.253 回答