Rounding off decimal fraction in ios

ぃ、小莉子 提交于 2019-12-08 15:56:18

问题


NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]];
NSLog(@"%@",temp);

I need round off a six decimal fraction number to two decimal. In iOS I tried the code above. I get the answer 23.5 when I give input as 23.45, but when I give input 23.445 the answer is 23.44.

Could someone clear-up "round half up" in iOS.


回答1:


Interestingly, well at least to me, it is a float precision issue. As rdelmar had suggested in comments.

This problem can be avoided, at least at this precision level, by using a double. For example:

NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
[format setMinimumFractionDigits:2];

// With Float:
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithFloat:23.445]]); // Float
// Logs 23.44
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithDouble:23.445]]); // Double
// Logs 23.45

So you were not suffering from bad code, just imprecise variables.



来源:https://stackoverflow.com/questions/12293754/rounding-off-decimal-fraction-in-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!