Раунд дабл в цели- C - PullRequest
1 голос
/ 13 июля 2020

Я хочу округлить число с двойной точностью до одного десятичного знака в Objective- C.

В Swift я могу сделать это с расширением:

public extension Double {
    /// Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

Однако, видимо, вы не можете вызовы расширений на примитивах из Objective- C, поэтому я не могу использовать расширение.

Я был бы счастлив выполнить округление либо непосредственно для двойника, либо в виде строки, однако ни одно из следующего не является рабочий:

 double mydub = 122.12022222223322;
 NSString *axtstr = [NSString stringWithFormat:@"%2f", mydub]; //gives 122.120222

 double rounded = (round(mydub*10)) / 10.0; //gives 122.100000

Как конвертировать 122.12022222223322; в 122,1?

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Вам нужно поставить десятичную дробь между % и 2f

[NSString stringWithFormat:@"%.2f", mydub];

1 голос
/ 13 июля 2020
double mydouble = 122.12022222223322;
NSString *str = [NSString stringWithFormat:@"%.2f", mydouble];
// = @"122.12"

.. не округляется mydouble. Вместо этого он будет применять только формат к выводу в виде строки.

double d = 122.49062222223322;
NSString *dStr = [NSString stringWithFormat:@"%.f %.1f %.2f %.3f", d, d, d, d];
// = @"122 122.5 122.49 122.491"

В качестве цели - C разделяет языковые правила из C, вы можете безопасно округлить с помощью

#include <math.h>

double rounded = round(mydouble);
// = 122.000000

из Конечно, вы можете сдвинуть запятую с умножением и делением степени десяти, если хотите. Foundation Framework .

И последнее, но не менее важное: вы можете сделать то же самое с C, что и со swift.

double roundbycomma(int commata, double zahl) {
    double divisor = pow(10.0, commata);
    return round(zahl * divisor) / divisor;
}
...