13

我从加速度计得到一个浮点值,如下所示:

-3.04299553323

例如,我想得到 -3.04。有没有一种简单的方法来舍入该浮点值?

编辑:

Objective-C 中的舍入数字

4

4 回答 4

41

我知道这是旧帖子,但以防万一其他人正在寻找快速的两步选项。

float old = -3.04299553323;  
float new = [[NSString stringWithFormat:@"%.2f",old]floatValue];

结果 =-3.04

@ " %.2f"将四舍五入到小数点后两位。如果您想要三位小数,请输入@"%.3f"等等。

希望这可以帮助!

于 2013-04-21T11:37:27.343 回答
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回合的事情。在某些情况下它可能已经足够好了,但您确实需要记住,结果并不是真正的四舍五入。

如果你想要更好的东西,你需要使用十进制算术。您可以通过将值保持为整数(例如,对于货币值,将它们保持为便士或美分而不是英镑或美元),或者使用您可以在 Wikipedia 的 Decimal Floating Point 页面上找到的各种十进制浮点包之一来做到这一点.

于 2011-07-13T16:00:37.463 回答
1

将其乘以 100,(如有必要,向上/向下舍入到最接近的整数),取整数部分,然后再除以 100

适用于任何数字小数位,乘/除以 10^(小数位数)。

于 2009-05-06T10:59:54.337 回答
1

我只是发布我对这个问题的答案,因为这是我快速完成这个工作的唯一方法,因为我合并了两个给定的答案以在 iPad 应用程序中向用户显示一个四舍五入的浮点值:

NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];
于 2015-01-09T12:49:42.667 回答