**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
。