为什么是这个输出?NSLog(@ "%0.2f" , 1.345);输出 1.34


**NSLog(@"%0.2f", 1.345); // output 1.34**
NSLog(@"%0.2f", 1.3451);// output 1.35
NSLog(@"%0.2f", round(1.345 * 100)/100.);//output 1.35

为什么第一行输出1.34?!!

====

=======================================

更新:

NSLog(@"%.2f", round([@"644.435" doubleValue] * 100) / 100); // output 644.43, 

NSLog(@"%.2f", round([@"6.435" doubleValue] * 100) / 100); // output 6.44? 

如果我想转换 NSString 以在该点后保留两位数,请您告知如何转换吗?

因为 1.345 不能用IEEE754准确表示。很有可能,它类似于 1.344444444449,打印时会给你 1.34。

如果你搜索像ieee754,精度和浮点这样的东西,十亿篇左右的文章之一应该能够启发你:-(

特别关注:每个计算机科学家都应该知道的关于浮点的知识。

更详细地检查以下 C 程序:

#include <stdio.h>
int main (void) {
    float f = 1.345f;
    double d = 1.345;
    printf ("f = %.20fnd = %.20lfn", f, d);
    return 0;
}

其输出为:

f = 1.34500002861022949219
d = 1.34499999999999997335

因此,float值略高于 1.345,而double(当您指定不带f后缀的1.345时,您将获得的(略低于。

这就解释了为什么您看到它被截断为 1.34 而不是四舍五入为 1.35

相关内容

  • 没有找到相关文章

最新更新