如何在Objective-C中设置精度

时间:2016-09-12 10:43:41

标签: objective-c

在C ++中,有一个std :: setprecision函数可以设置float / double精度。  如何在Objective-C中设置精度?并在下面打印:

(lldb) p 10/200
(int) $0 = 0
(lldb) p (float)10/200
(float) $1 = 0.0500000007

第3行结果是0.0500000007,为什么结果为'7'?我怎样才能得到0.05的结果?

4 个答案:

答案 0 :(得分:2)

浮点数是二进制浮点数。 0.05不能用二进制浮点数精确表示。结果不可能完全是0.05。

另外,你使用float而不是double是毫无意义的。 float只有六位或七位精度。除非你有充分的理由可以解释,否则使用double,它可以提供大约15位数的精度。你仍然无法准确地得到0.05,但错误会少得多。

答案 1 :(得分:0)

您可以使用NSNumberFormatter以各种方式格式化对象 - 这里列出的数量太多,请参阅Xcode提供的文档。另请参阅数据格式指南。

答案 2 :(得分:0)

您必须在% modulo运算符与其identifier f之间进行更改才能获得所需的结果。

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];

%。02f告诉格式化程序你将格式化一个浮点数(%f),并且应该舍入到两个位置,并且应该用0填充。

示例:

%f = 25.000000    // results 25.000000 
%.f = 25    // results 25
%.02f = 25.00 // results 25.00

答案 3 :(得分:-1)

使用

     double A =  0.0500000007;
       NSString *b =[NSString stringWithFormat:@"$%.02f",A] ;
   double B = [b doubleValue];