我有一个存储 textfield.text 输入的数组。然后我将文本作为 float 检索到其他地方。这似乎给了我文本字段中的“确切数字”。
例子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 输入是 22.8
, float
返回 22.8
但是,
示例 B
[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];
float number = [[storedData objectAtIndex:myIndex] floatValue];
float
返回 22.7999999
我不明白为什么我得到示例 A 中的确切数字
最佳答案
值 22.8 不能精确地用二进制 float 表示。您看到的是基于显示格式的表示。不同的显示方法可能使用不同的显示格式。显示位数和四舍五入不同意味着 22.8 和 22.7999999 对于四舍五入后显示的位数都是正确的。请注意,显示的是 22.7999999 而不是 22.8000000,因为下一位是 2,所以显示的值是向下舍入的。
这是依赖于基数的,也就是说,在一个基数中可以准确的东西在不同的基数中可能不准确。在这种情况下,十进制数中的22.8不能精确到二进制数中。
这就是 NSDecimal 存在的原因,也是 float 不用于货币值的原因。
这有点等同于以小数为基数显示 pi 的值,位数是无限的,因此对于每次显示,有人决定要显示多少位数。有趣的是,pi 可以在 pi 数基中准确(但有用)表示。 :-)
在 float
和 double
的情况下,可以表示的数字数量是有限的。
关于ios - 为什么 UITextfield.text 从数组中检索时返回精确的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825257/