如何围绕CGFloat值

时间:2011-07-11 16:39:43

标签: iphone objective-c rounding cgcontext cgfloat

  

可能重复:
  NSNumberFormatter for rounding up float values

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

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

我收到浮点值:0.124979,0.249958,0.499917。如何使用roundf将其转换为0.125,0.250,0.500。

3 个答案:

答案 0 :(得分:9)

试试这个........

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

Previous SO answer

被盗

答案 1 :(得分:7)

听起来你想要一个圆形数字,它仍然是一个浮点数,但只有3位小数而不只是用于显示目的?那是你在问什么? IEEE浮点数是一个真正的痛苦。您可以指定foo = 1.5然后最终得到1.499999999,然后如果你说if ( foo == 1.5 )它就会失败。对我来说,这似乎是一个错误,但有很长的描述为什么这在网上是“正确的”。对我来说,似乎象牙塔正确,对现实世界毫无用处。

所以,有些可能性。我想知道是否乘以1000然后四舍五入到整数值然后除以1000将起作用...当然相同的IEEE浮动bug,抱歉 spec 可能仍会咬你...值得一个尝试。

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

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

这样可以做你想做的事。

运气。

答案 2 :(得分:0)

看看这个stackoverflow链接,它有两个很好的选项,可以将它舍入并将其转换为字符串或使用NSNumberFormatter将其舍入。

链接:Rounding a CGFLoat

希望这能帮到你!