如何将浮点数舍入到2位小数?

时间:2012-11-10 18:31:29

标签: objective-c ios floating-point

这是我的算法,可以找出游戏的速度。

self.speed = 0.7-self.score / 50;

现在我如何将self.speed舍入到小数点后两位?

3 个答案:

答案 0 :(得分:5)

注意:我的回答假设您只关心小数位数,以便向用户显示值。

当您设置NSNumberFormatter以将数字格式化为字符串以进行显示时,请将格式化程序设置为最多两个小数位。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];

NSString *formattedNumber = [formatter stringFromNumber:@(self.speed)];

如果您需要特定的圆方法,可以选择使用setRoundingMode:方法。

BTW - 您不应该使用字符串格式,因为它不会考虑用户的语言环境来正确格式化数字。

答案 1 :(得分:3)

浮点数是以IEEE754格式处理的,你不能直接决定将使用多少个小数位。你可以直接决定使用多少位,或间接围绕数字的las部分:

NSString* str=[NSString stringWithFormat: @"%.2f", number];
number= atof([str UTF8String]);

但是像maddy指出的那样,只有在向用户显示数字时才需要舍入/截断不需要的十进制数字,因此在打印时只能使用%.2f格式说明符,或者使用格式化程序。

答案 2 :(得分:0)

self.speed = (int)(self.speed * 100 + 0.5) / 100.0;

如果你想把它作为一个字符串:

NSString *speedString = [NSString stringWithFormat: @"%.2f", self.speed];