【问题标题】:How to round of CGFloat value [duplicate]如何四舍五入 CGFloat 值
【发布时间】:2011-07-11 16:39:43
【问题描述】:

可能重复:
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。

【问题讨论】:

    标签: iphone objective-c rounding cgcontext cgfloat


    【解决方案1】:

    试试这个…………

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

    盗自Previous SO answer

    【讨论】:

    • 谢谢。但是我怎样才能在这个转换四舍五入:CGFloat scale = CGContextGetCTM(context).a;
    • 试试 NSLog(@"SCALE: %.3fg",scale);
    • 我现在没有mac..所以我无法准确给出答案:(
    • @lifemoveson:如果您没有得到所需的输出,则意味着不要将其标记为已接受的答案。那么只有你才能从其他用户那里得到正确的答案。
    • 正确意味着它回答了您提出的问题,对吗?
    【解决方案2】:

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

    所以,有一些可能性。我想知道乘以 1000,然后四舍五入到整数值,然后除以 1000 是否可行...当然相同的 IEEE 浮动错误,抱歉 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
    

    这样就可以做到你想要的。

    运气。

    【讨论】:

      【解决方案3】:

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

      链接:Rounding a CGFLoat

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        相关资源
        最近更新 更多