为什么UITextfield.text在从数组中检索时返回精确的浮点数?

时间:2013-11-06 23:44:53

标签: ios objective-c uitextfield floating-accuracy

我有一个存储textfield.text输入的数组。然后我在其他地方检索文本作为浮点数。这似乎给了我文本字段中的“确切数字”。

示例A

   navtestAppDelegate *appDelegate = 
   (navtestAppDelegate *)[[UIApplication 
    sharedApplication] delegate];

NSMutableArray *storedData = 
 appDelegate.myData;

[storedData replaceObjectAtIndex: myIndex withObject: mytextfield.text];

float number = [[storedData objectAtIndex:myIndex] floatValue];

如果mytextfield.text input is 22.8float number返回22.8

然而,

例B

[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];

float number  = [[storedData objectAtIndex:myIndex] floatValue];

float number返回22.7999999

我不明白为什么我在例A中得到确切的数字

2 个答案:

答案 0 :(得分:0)

值22.8不能完全用二进制浮点表示。您所看到的是基于显示格式的表示。不同的显示方法可以使用不同的显示格式显示不同的位数和舍入意味着22.8和22.7999999对于舍入后显示的位数是正确的。请注意,显示的是22.7999999而不是22.8000000,因为下一个数字是2,因此显示的值向下舍入。

这是基于依赖的,即在一个数字库中可以精确的事物可能不能在不同的数字基础上精确。在这种情况下,十进制数字基数中的22.8在二进制数字基数中不能精确。

这就是NSDecimal存在的原因以及浮点不用于货币值的原因。

这有点相当于以十进制小数显示pi的值,数字的位数是无限的,因此对于每个显示器,某人决定要显示多少位数。有趣的是,pi可以在pi数字基础上准确地表示(但有用)。 : - )

floatdouble的情况下,可以表示有限数量的数字。

答案 1 :(得分:0)

试试这样: -

[storedData replaceObjectAtIndex: myIndex    
 withObject: [NSNumber 
 numberWithFloat:22.8]];