Округление со значительными цифрами - PullRequest
4 голосов
/ 19 июля 2011

В Xcode / Objective-C для iPhone.

У меня есть число с плавающей запятой со значением 0.00004876544. Как заставить его отображать с точностью до двух знаков после запятой после первого значащего числа?

Например, 0,00004876544 будет читать 0,000049.

1 Ответ

4 голосов
/ 19 июля 2011

Я не запускал это через компилятор, чтобы перепроверить его, но вот основная часть алгоритма (преобразованная из ответа этот вопрос ):

-(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.Этот метод использует функции C, определенные в math.h.

...