Objective c 为什么浮点打印为负零? 问题

Objective c 为什么浮点打印为负零? 问题,objective-c,cocoa-touch,math,matrix,transform,Objective C,Cocoa Touch,Math,Matrix,Transform,有时,值为零的浮点数被打印为负零,即使不等式检查表明该数字不是负的 应用 我正在尝试以人类可读的格式注销UIView的转换矩阵。编号的排列应如下所示: - (void) describe { NSLog( @"|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 0.00|\n|%@%.2f %@%.2f 1.00|", self.transform.a < 0 ? @"" : @"

有时,值为零的浮点数被打印为负零,即使不等式检查表明该数字不是负的

应用 我正在尝试以人类可读的格式注销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|
在上述情况下,self的NSLog将转换打印为:

transform = [-0, -1, 1, -0, 0, 0];

问题是零值作为负零被注销,但被检测为非负。如果我能理解这个虚构的负零是如何存在的,那么我就可以解决我的格式问题。

[答案从注释中移走]


浮点值的mantisa、指数和符号是分开的

所以它们能够存储+0和-0,这是相同的。。。 符号是上一次操作的剩余值。。。
负零是非负的;零。但是,为什么不直接使用字段格式,而不是用如此困难的方法呢?例如:NSLog@|%5.2f%5.2f 0.00 | \n |%5.2f%5.2f 0.00 | \n |%5.2f%5.2f%5.2f 1.00 |…@CarlNorum heh你用这个+1浮点值比我快了几秒钟,因为mantisa、指数和符号是分开的,所以它们能够存储+0和-0,这是相同的。。。符号是上一次操作的剩余值…@CarlNorum我尝试了你的格式化方法,但小数点前面的5只是在小数点左边设置了一个最大数字范围。它将填充小数字。@Pwner,它设置整个数字的字段宽度,而不仅仅是小数点的左边。填充有什么问题?你想让号码排成一行,对吗?
transform = [-0, -1, 1, -0, 0, 0];