I'm using the following piece of Objective-C code to format a NSNumber, and it works fine most of the time, but it doesn't quite do what I want when the NSNumber object holds an integer (no fractional part).
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setFormat:@"###.##"];
int bytes = 1024 * 1024;
NSNumber *total = [NSNumber numberWithFloat:([self.totalFileSize floatValue] / bytes)];
label.text = [NSString stringWithFormat:@"0.00 MB of %@ MB", [formatter stringFromNumber:total]];
So for instance, if self.totalFileSize
holds 55.2300, it will display "55.23" as it should on my UILabel
. But if that same variable holds 55, it will simply display "55" on the label.
What I really want is for this code to always include the 2 decimal places in the output.
How can I achieve that?
Your format string should have a "0
" for each decimal place you want to always exist.
[formatter setFormat:@"###.00"];
for "55.23" and ".23" and ".20"
[formatter setFormat:@"##0.00"];
for "55.23" and "0.23" and "0.20"
See Number Format String Syntax (Mac OS X Versions 10.0 to 10.3)
Or you can use a 10.4 formatter with - setMinimumFractionDigits: and - setMaximumFractionDigits: with both set to 2.
I believe what you are looking for is: "%.2f"
Worst case scenario, you can split the value, check if there is anything after the decimal. If there isn't add the 00 by hand?
You might be better off with localizedStringWithFormat, like so...
[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
int bytes = 1024 * 1024;
label.text = [NSString localizedStringWithFormat:@"0.00 MB of %.2f MB", ([self.totalFileSize floatValue] / bytes)];
And of course, bytes could be a const unsigned, and clearColor tends to be a performance hog, but those are issues for another thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With