【问题标题】:Rounding with significant digits用有效数字四舍五入
【发布时间】:2011-07-19 17:02:01
【问题描述】:

在 Xcode /Objective-C for iPhone 中。

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

例如,0.00004876544 将读取 0.000049。

【问题讨论】:

  • 这项工作可以吗:stackoverflow.com/questions/202302/…
  • 谢谢 TreyA 我不确定我在找什么。
  • @Tom 你确定吗?接受答案中的算法看起来不错,您只需将其转换为 C 即可,它应该可以正常工作。
  • @Nate 真的,我只是查看了示例,但似乎并不适用。我不是很数学。并且不知道如何将其转换为objective-c。有什么帮助吗?

标签: objective-c math floating-point rounding significant-digits


【解决方案1】:

我没有通过编译器运行它来仔细检查它,但这里是算法的基本要点(从this question 的答案转换):

-(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;
}

要记住的重要一点是,Objective-C 是 C 的超集,所以任何在 C 中有效的东西在 Objective-C 中也是有效的。该方法使用math.h中定义的C函数。

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2021-03-23
    相关资源
    最近更新 更多