我试图在我的 NSString 中指定我的浮点数的准确性,但我不断收到此错误:
格式指定类型“双”,但参数的类型为“NSString *”
这是我的代码:
NSString *tmplabel = [tmp description];
temp.text = [NSString stringWithFormat: @"%.fº", tmplabel];
我究竟做错了什么?
我试图在我的 NSString 中指定我的浮点数的准确性,但我不断收到此错误:
格式指定类型“双”,但参数的类型为“NSString *”
这是我的代码:
NSString *tmplabel = [tmp description];
temp.text = [NSString stringWithFormat: @"%.fº", tmplabel];
我究竟做错了什么?
你的 tmplabel 是一个NSString
,它应该是一个double
.
如果您确定 tmplabel 包含一个可以解析为简单双精度的数字,那么您可以直接使用doubleValue
它。否则,您可能需要通过错误处理等进行更精细的转换。
这是一个脚踏实地的简单方法:
temp.text = [NSString stringWithFormat: @"%.fº", [tmplabel doubleValue]];
该doubleValue
方法(及其近亲integerValue
和类似方法)解释字符串的内容,如果可以将字符串的开头读取为数字,它将为您转换它并将其作为适当的原始类型返回。在您的情况下,原始类型是double
.
您不能将类型从对象(任何 NS*)转换为原始类型,但总是必须经过某种解释或程序转换。
最后,请注意,doubleValue
直接在用户输入上使用是一种快捷方式,您将在某个时候重新访问它,因此请记住使用数字格式化程序或NSScanner
更高版本重新实现它。要了解原因,请尝试输入非数字数据,看看您是否对结果满意。
最后,要按照您的要求实际设置精度(即小数点后的小数位数),请参阅下面的王子答案或DharaParekh 的。
尝试这个
NSString *tmplabel = [tmp description];
temp.text = [NSString stringWithFormat: @"%.f", [tmplabel doubleValue]];
尝试这个:
NSString *tmplabel = [tmp description];
float tmp = [tmplabel floatValue];
temp.text = [NSString stringWithFormat: @"%.1f", tmp];
{
temp.text = [NSString stringWithFormat: @"%.1f", tmplabel];
}
您可以更改 f 前面的数字以指定精度。