简体   繁体   中英

Round double in Objective-C

I want to round a double to one decimal place in Objective-C.

In Swift I can do it with an extension:

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

However, apparently you cannot call extensions on primitives from Objective-C so I can't use the extension.

I would be happy to do the rounding either on the double directly or as a string, however, neither of the following is working:

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

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

How do I convert 122.12022222223322; into 122.1?

You need to put a decimal between the % and 2f

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

double mydouble = 122.12022222223322;
NSString *str = [NSString stringWithFormat:@"%.2f", mydouble];
// = @"122.12"

.. will not round mydouble . Instead it will only apply format to the output as string.

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

As Objective-C shares the language rules from C you can round safely with

#include <math.h>

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

of course you can shift comma with multiplication and dividing the power of ten you want.

double commashifted = round(mydouble*100.0)/100.0;
// = 122.120000;

If you are really into Objective-C Classes to do same in deluxe have a look into 'NSDecimal.h' in the Foundation Framework .

Last but not least you can do the same with C as you did with swift.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM