Friday, April 29, 2011

Rounding numbers in Objective-C

Hi,

I'm trying to do some number rounding and conversion to a string to enhance the output in an Objective-C program.

I have a float value that I'd like to round to the nearest .5 and then use it to set the text on a label.

For example:

1.4 would be a string of: 1.5

1.2 would be a string of: 1

0.2 would be a string of: 0

I've spent a while looking on Google for an answer but, being a noob with Objective-C, I'm not sure what to search for! So, I'd really appreciate a pointer in the right direction!

Thanks, Ash

From stackoverflow
  • I'd recommend looking into using NSNumberFormatter.

  • NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
    
  • Thanks for the pointers everyone, I've managed to come up with a solution:

    float roundedValue = round(2.0f * number) / 2.0f;
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:1];
    [formatter setRoundingMode: NSNumberFormatterRoundDown];
    
    NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]];
    [formatter release];
    

    The above works for the test cases I threw at it, but if anyone knows a better way to do this I'd be interested to hear it!

    Chuck : If this is being output to a text field, you can just attach the formatter to the field.
  • Use lroundf() to round a float to integer and then convert the integer to a string.

  • NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
    

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.