如何对CGFloat值进行四舍五入

3

可能是重复内容:
如何四舍五入浮点数的NSNumberFormatter类

目前,我使用以下方式计算比例因子:

CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);

我收到的浮点数为:0.124979、0.249958、0.499917。如何使用roundf函数将其转换为分别为0.125、0.250、0.500的数值?
3个回答

9

尝试这个……

NSLog(@"SCALE : %.3f", scale);
NSString *value = [NSString stringWithFormat:@"%.3f", theFloat];

之前的SO答案中窃取


谢谢。但是我该如何将这个舍入转换为:CGFloat scale = CGContextGetCTM(context).a; - lifemoveson
尝试使用 NSLog(@"SCALE: %.3fg",scale); - Aravindhan
我现在没有Mac,所以无法准确回答 :( - Aravindhan
1
@lifemoveson:如果您没有得到所需的输出,请不要将其标记为接受的答案。只有这样,您才能从其他用户那里得到正确的答案。 - Aravindhan
1
正确意味着它回答了你所问的问题,是吗? - Dad
显示剩余2条评论

7
听起来你想得到一个保留三位小数但仍为浮点数的四舍五入数字,而不仅仅是为了显示目的?这就是你在问的吗?IEEE浮点数真是一大烦恼。你可以将foo = 1.5赋值,然后最终会得到1.499999999,如果你接下去说if ( foo == 1.5 )它就失败了。对我来说,这似乎是个错误,但网上有关于这样做“正确”的长篇描述。在我看来,这似乎是象牙塔正确,而在现实世界中却毫无用处。

所以,有些可能性。我想知道是否将其乘以1000,将其四舍五入为整数值,然后再除以1000会起作用……当然,相同的IEEE浮点错误(抱歉,是规范)可能仍然会影响你……这值得一试。

让我好奇并写了一个快速测试:

CGFloat foo = 0.124979;
NSLog(@"foo is: %f", foo );
NSInteger ifoo = ceil(foo * 1000.0);
foo = ifoo / 1000.0;
NSLog( @"ifoo is: %d, and back to foo is: %f", ifoo, foo );

在模拟器中,这将输出:

test[5127:207] foo is: 0.124979
test[5127:207] ifoo is: 125, and back to foo is: 0.125000

这样可能会达到你想要的效果。

祝好运。


0

看这个stackoverflow链接,它有两个不错的选择,可以将其四舍五入并转换为字符串或使用NSNumberFormatter进行四舍五入。

链接: CGFLoat四舍五入

希望这能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接