ios - 为什么 UITextfield.text 从数组中检索时返回精确的 float ?

标签 ios objective-c uitextfield floating-accuracy

我有一个存储 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 数基中准确(但有用)表示。 :-)

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

关于ios - 为什么 UITextfield.text 从数组中检索时返回精确的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825257/

相关文章:

iOS 空 Firebase 推送通知不显示

ios - Swift 中 UIViewcontroller 的实例

ios - 如何限制 HH :MM:SS Formatter? 中的 textField 最大值

ios - 在 TextField iOS 中按退格键/删除键

objective-c - 使用 gcc 4.6.2 编译 Objective-C

swift - UIDataPicker 到 TextField

c# - 迁移到 Qualcomm 增强现实时出现 ARCamera 问题 vuforia-unity-android-ios-3-0-6

ios - Metaio SDK : problems setting up a new project

ios - 异常 'NSInternalInconsistencyException' ,原因 : 'Could not load NIB in bundle: . ..有人可以找出这有什么问题吗

ios - 如何获取设备的公网IP地址