stringWithFormat float 的奇怪行为

2023-12-28

(lldb) po [NSString stringWithFormat:@"%.1f", 0.01]
(id) $21 = 0x003a2560 19991592471028323832250853378750414848.0
(lldb) po [NSString stringWithFormat:@"%.1f", 0.1]
(id) $22 = 0x0de92240 -0.0

有人理解这里的行为吗?我正在设备上运行。


这是一个错误lldb。如果你尝试同样的事情gdb,工作正常。我猜测lldb仅传递参数的低 32 位。 0.01 及其打印数字的 IEEE 表示如下:

47ae147b3778df69 = 19991592471028323832250853378750414848.00
3f847ae147ae147b = 0.01

请注意,0.01 的低 32 位与另一个数字的高 32 位相匹配。

该错误也发生在printf:

(lldb) expr (void)printf("%.1f\n", 0.01)
19991592257096858016910903319197646848.0
<no result>

它不会发生在+[NSNumber numberWithDouble:]:

(lldb) po [NSNumber numberWithDouble:0.01]
(id) $3 = 0x0fe81390 0.01

所以我怀疑这个错误是在lldb可变参数函数的处理。

您可以在以下位置打开错误报告:LLVM bugzilla http://llvm.org/bugs/和/或在苹果错误报告器(又名雷达) https://bugreport.apple.com/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stringWithFormat float 的奇怪行为 的相关文章

随机推荐