答案 0 :(得分:39)
我知道这是旧帖子,但以防其他人正在寻找快速的两步选项。
float old = -3.04299553323;
float new = [[NSString stringWithFormat:@"%.2f",old]floatValue];
结果= -3.04
@“%。2f”将四舍五入到小数点后两位。如果你想要三个小数位放 @“%。3f”等等。
希望这有帮助!
答案 1 :(得分:32)
您应该只在格式化数字以便向最终用户显示时执行此操作,因为无法保证
float rounded = roundf(orig * 100) / 100.0;
或类似的将返回一个确切的答案。
事实上,一般情况下,它不会。例如,考虑
float f = 123456.3;
float r = roundf(f * 100) / 100.0;
printf("%.2f, %.10f\n", r, r);
输出
123456.30, 123456.2968750000
糟糕!
使用double
而不是float
会有所帮助,但即便如此,如果我们稍微更改一下代码,您会发现它并没有真正解决问题:
double f = 123456.3;
double r = round(f * 100) / 100.0;
printf("%.2f, %.20f\n", r, r);
再次,我们得到
123456.30, 123456.30000000000291038305
非常清楚地表明它并非完全圆润。
无论如何,故事的寓意是,像round(f * 100) / 100.0
这样的事情只会围绕近似。在某些情况下它可能已经足够好了,但你需要记住结果不是真的舍入。
如果你想要更好的东西,你需要使用十进制算术。您可以通过将值保持为整数来实现此目的(例如,对于货币值,将它们保持为便士或美分而不是磅或美元),或者使用您可以找到的各种十进制浮点包之一on Wikipedia's Decimal Floating Point page。
答案 2 :(得分:1)
将它乘以100,(如果需要,向上/向下舍入到最接近的整数),取整数部分,然后再除以100
适用于任何小数位数,乘以/除以10 ^(小数位数)。
答案 3 :(得分:1)
我只是发布了我对这个问题的回答,因为这是让我快速完成工作的唯一方法,因为我合并了两个给定的答案,在iPad应用中向用户显示一个圆形浮点值:
NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];