如何围绕CGFloat值

lif*_*son 3 iphone objective-c rounding cgcontext cgfloat

可能重复:
NSNumberFormatter用于舍入浮点值

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

CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);
Run Code Online (Sandbox Code Playgroud)

我收到一个浮点值:0.124979,0.249958,0.499917.我怎样才能使用roundf将其转换为0.125,0.250,0.500.

Ara*_*han 9

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

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

以前的SO回答中被盗


Dad*_*Dad 7

听起来你想要一个四舍五入的数字仍然是一个浮点数,但只有3位小数,而不仅仅是为了显示目的?那是你在问什么?IEEE浮点数是一个真正的痛苦.您可以指定foo = 1.5,然后您最终会得到1.499999999,如果您再说if ( foo == 1.5 )它会失败.对我来说,这似乎是一个错误,但有很长的描述为什么这在网上是"正确的".对我来说,似乎象牙塔正确和现实世界都没用.

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

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

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 );
Run Code Online (Sandbox Code Playgroud)

输出这个(无论如何在模拟器中):

test[5127:207] foo is: 0.124979
test[5127:207] ifoo is: 125, and back to foo is: 0.125000
Run Code Online (Sandbox Code Playgroud)

这可能会做你想要的.

运气.