**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以保持两位数之后,请告知如何转换?
答案 0 :(得分:4)
因为1.345无法在IEEE754中完全表示。更有可能的是,它类似于1.34444444449,打印时会给你1.34。
如果你搜索像ieee754,精度和浮点这样的东西,那么十亿左右的文章中的一篇应该能够启发你: - )
特别注意:What every computer scientist should know about floating point。
进入更多细节,检查以下C程序:
#include <stdio.h>
int main (void) {
float f = 1.345f;
double d = 1.345;
printf ("f = %.20f\nd = %.20lf\n", f, d);
return 0;
}
这个输出是:
f = 1.34500002861022949219
d = 1.34499999999999997335
因此float
值略高于1.345而double
(这是指定1.345
时没有f
后缀的内容)略低于
这解释了为什么您将其截断为1.34
而不是舍入为1.35
。