目前,我使用以下方法计算比例因子:
CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);
我收到一个浮点值:0.124979、0.249958、0.499917。如何使用 roundf 将其分别转换为 0.125、0.250、0.500。
目前,我使用以下方法计算比例因子:
CGFloat scale = CGContextGetCTM(context).a;
NSLog(@"SCALE : %f", scale);
我收到一个浮点值:0.124979、0.249958、0.499917。如何使用 roundf 将其分别转换为 0.125、0.250、0.500。
试试这个........
NSLog(@"SCALE : %.3f", scale);
NSString *value = [NSString stringWithFormat:@"%.3f", theFloat];
听起来你想要一个仍然是浮点数但只保留 3 位小数的四舍五入数字,而不仅仅是为了显示目的?这就是你要问的吗?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
所以这可能会做你想要的。
运气。
看看这个 stackoverflow 链接,它有两个不错的选择,将其舍入并将其转换为字符串或使用 NSNumberFormatter 对其进行舍入。
链接:四舍五入 CGFLoat
希望这对你有帮助!