Round doubles in Objective-C

前端 未结 4 2015
长情又很酷
长情又很酷 2021-01-17 16:28

I have double number in a format like 34.123456789. How can I change it to 34.123?

I just want 3 digits after the decimal point.

相关标签:
4条回答
  • 2021-01-17 17:06

    You can use:

    #include <math.h>
    :
    dbl = round (dbl * 1000.0) / 1000.0;
    

    Just keep in mind that floats and doubles are as close an approximation as the underlying type can provide. It may not be exact.

    0 讨论(0)
  • 2021-01-17 17:20

    You can print it to 3 decimal places with [NSString stringWithFormat:@"%.3f",d].

    You can approximately round it with round(d*1000)/1000, but of course this isn't guaranteed to be exact since 1000 isn't a power of 2.

    0 讨论(0)
  • 2021-01-17 17:20

    If you want to make

    34.123456789 -> 34.123
    34.000000000 -> 34 not 34.000
    

    You can use NSNumberFormatter

    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setMaximumFractionDigits:3]; // 3 is the number of digits
    
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:34.123456789]]);  // print 34.123
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:34.000000000]]);  // print 34
    
    0 讨论(0)
  • 2021-01-17 17:24

    The approved solution has a small typo. It's missing the "%".

    Here is the solution without the typo and with a little extra code.

    double d = 1.23456;
    NSString* myString = [NSString stringWithFormat:@"%.3f",d];
    

    myString will be "1.234".

    0 讨论(0)
提交回复
热议问题