3

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

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

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

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

4

3 回答 3

9

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

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

上一个 SO 答案中窃取

于 2011-07-11T16:45:54.423 回答
7

听起来你想要一个仍然是浮点数但只保留 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

所以这可能会做你想要的。

运气。

于 2011-07-11T18:09:25.513 回答
0

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

链接:四舍五入 CGFLoat

希望这对你有帮助!

于 2011-07-11T16:46:14.747 回答