在NSString中指定浮点数精度

时间:2013-05-14 11:09:47

标签: objective-c floating-point nsstring string-formatting

我正在尝试在我的NSString中指定浮动指针编号的准确性,但我继续收到此错误:

  

Format指定类型'double',但参数的类型为'NSString *'

这是我的代码:

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

我做错了什么?

4 个答案:

答案 0 :(得分:3)

您的tmplabel是{​​{1}},应该是NSString

如果您确定tmplabel拥有一个可以解析为简单双精度的数字,那么您可以在其上使用double。否则,您可能需要使用错误处理等进行更精细的转换。

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

doubleValue

temp.text = [NSString stringWithFormat: @"%.fº", [tmplabel doubleValue]]; 方法(及其近亲doubleValue和类似方法)解释字符串的内容,如果字符串的开头可以读作数字,将为您转换它并将其作为适当的基元类型返回。在您的情况下,基元类型为integerValue

您不能将对象(任何NS *)的类型转换为基本类型,但始终必须经过某种解释或编程转换。

最后,请注意直接在用户输入上使用double是您希望在某个时刻重新访问的快捷方式,因此请记下使用数字格式化程序重新实现它doubleValue之后。要了解原因,请尝试输入非数字数据,看看您对结果是否满意。

最后,要按照您的要求实际设置准确度(即小数点后的小数位数),请参阅下面的王子answerDharaParekh's

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:2)

试试这个:

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

答案 3 :(得分:0)

{
temp.text = [NSString  stringWithFormat: @"%.1f", tmplabel];
}

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