有时零值的浮点数打印为负零,即使不等式检查显示该数字为非负数。
我正试图以人类可读的格式注销UIView的转换矩阵。数字应该安排如下:
- (void) describe
{
NSLog(
@"|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 1.00|",
self.transform.a < 0 ? @"" : @" ",
self.transform.a,
self.transform.b < 0 ? @"" : @" ",
self.transform.b,
self.transform.c < 0 ? @"" : @" ",
self.transform.c,
self.transform.d < 0 ? @"" : @" ",
self.transform.d,
self.transform.tx < 0 ? @"" : @" ",
self.transform.tx,
self.transform.ty < 0 ? @"" : @" ",
self.transform.ty
);
}
我在非负数字前面放置空格以匹配负数的宽度。在某些情况下,数字排成一行:
| 0.00 -1.00 0.00|
| 1.00 0.00 0.00|
| 0.00 0.00 1.00|
对视图进行几次旋转后,数字不再对齐:
| -0.00 -1.00 0.00|
| 1.00 -0.00 0.00|
| 0.00 0.00 1.00|
在上述情况下,NSLog
self
将变换打印为:
transform = [-0, -1, 1, -0, 0, 0];
问题是零值被记录为负零,但被检测为非负值。如果我能理解这个神秘的负零甚至可以存在,那么我可以解决我的格式化问题。
答案 0 :(得分:0)
[回复评论]
浮点值有mantisa,指数和符号分开