use*_*804 18 c iphone floating-point double objective-c
当在iPhone应用程序中使用double或float数据类型时,我遇到了"> ="和"<="比较的问题,因为当为变量分配一个带有一个小数位的数字时,例如4.2,浮点数或双精度数用于比较实际上可能有一个值,如4.1999998092651367.由于这种差异,诸如"> = 4.2"之类的比较是错误的而不是真实的.我该如何避免这个问题?
Ste*_*non 64
当为变量分配一个带有一个小数位的数字时,例如4.2,比较中使用的float或double实际上可能有一个值,例如4.1999998092651367
没有可能. 会的.再具体一点:
float f = 4.2; // f is exactly 4.19999980926513671875
double d = 4.2; // d is exactly 4.20000000000000017763568394002504646778106689453125
Run Code Online (Sandbox Code Playgroud)
当你写下这样的东西时会出现问题:
float f = 4.2;
if (f >= 4.2) {
// this block of code is not executed.
}
Run Code Online (Sandbox Code Playgroud)
f确切地说4.19999980926513671875,但是你将它与双精度字面值 "4.2"进行比较,它具有值4.20000000000000017763568394002504646778106689453125,因此比较失败.相反,如果您与单精度字面值"4.2f"进行比较:
float f = 4.2;
if (f >= 4.2f) {
// this block of code is exectued.
}
Run Code Online (Sandbox Code Playgroud)
比较成功,因为值完全相等.浮点很复杂,但它完全是确定性的; 您可以做的最简单的事情之一就是不要混合精确度.如果您正在使用float,请确保所有文字都带有后缀,f以使它们具有单精度.
(这也可以提高性能,但这不是理由;执行此操作的原因是因为它会使您的代码更正确).
| 归档时间: |
|
| 查看次数: |
11017 次 |
| 最近记录: |