Objective c 用有效数字四舍五入

Objective c 用有效数字四舍五入,objective-c,math,floating-point,rounding,significant-digits,Objective C,Math,Floating Point,Rounding,Significant Digits,在iPhone的Xcode/Objective-C中 我有一个值为0.00004876544的浮点。如何让它在第一个有效数字后显示到小数点后两位 例如,0.00004876544的读数为0.000049。我没有通过编译器对其进行双重检查,但下面是算法的基本jist(从答案转换为): -(float)round:(float)num to significantFigures:(int)n{ 如果(num==0){ 返回0; } 双d=ceil(log10(num

在iPhone的Xcode/Objective-C中

我有一个值为0.00004876544的浮点。如何让它在第一个有效数字后显示到小数点后两位


例如,0.00004876544的读数为0.000049。

我没有通过编译器对其进行双重检查,但下面是算法的基本jist(从答案转换为):

-(float)round:(float)num to significantFigures:(int)n{
如果(num==0){
返回0;
}
双d=ceil(log10(num<0?-num:num));
整数幂=n-(整数)d;
双倍量级=功率(10,功率);
长位移=四舍五入(数值*幅度);
返回/幅度;
}

需要记住的重要一点是,Objective-C是C的超集,因此任何在C中有效的东西在Objective-C中都是有效的。此方法使用在
数学中定义的C函数。h

此方法有效吗:谢谢TreyA,我不确定这是我要找的。@Tom你确定吗?接受答案中的算法看起来不错,您只需将其转换为C,它应该可以正常工作。@Nate真的,我只是看了示例,但它似乎不适用。我不太懂数学。不知道如何把它转换成objective-c。有什么帮助吗?可能是重复的
-(float) round:(float)num toSignificantFigures:(int)n {
    if(num == 0) {
        return 0;
    }

    double d = ceil(log10(num < 0 ? -num: num));
    int power = n - (int) d;

    double magnitude = pow(10, power);
    long shifted = round(num*magnitude);
    return shifted/magnitude;
}