IOS 四舍五入问题

作者: godgnay | 来源:发表于2015-07-03 21:48 被阅读2459次

     - (NSString*)notRounding:(CGFloat)price afterPoint:(NSInteger)position {

    NSDecimalNumberHandler*roundingBehavior = [NSDecimalNumberHandlerdecimalNumberHandlerWithRoundingMode:NSRoundDownscale:positionraiseOnExactness:NOraiseOnOverflow:NOraiseOnUnderflow:NOraiseOnDivideByZero:NO];

    NSDecimalNumber*ouncesDecimal;

    NSDecimalNumber*roundedOunces;

    ouncesDecimal = [[NSDecimalNumberalloc]initWithString:[NSStringstringWithFormat:@"%@",@(price)]];

    roundedOunces = [ouncesDecimaldecimalNumberByRoundingAccordingToBehavior:roundingBehavior];

    return[NSStringstringWithFormat:@"%@",roundedOunces];

    }

    遇到开发项目中数据显示需要四舍五入的,也遇到不需要四舍五入的,本人就说说这个四舍五入吧。

    介绍一下参数:

    price:需要处理的数字,

    position:保留小数点第几位,

    然后调用

    float s =0.126;

    NSString *sv = [self notRounding:s afterPoint:2];

    NSLog(@"sv = %@",sv);

    输出结果为:sv = 0.12

    接下来介绍NSDecimalNumberHandler初始化时的关键参数:decimalNumberHandlerWithRoundingMode:NSRoundDown,

    NSRoundDown代表的就是只舍不入。

    scale的参数position代表保留小数点后几位。

    如果只入不舍怎么办,比如,float 0.162 想要得到0.17该怎么做?,在开发文档上有这样一个表,是按照保留小数点后一位处理的。相信大家一看就明白了:

    方法二:

    1、round(12345.6789)结果为:12346

    2、round(12345.6789*100)/100结果为:12345.68

    第二个是我要的结果,但是我不明白这么个简单的四舍五入要搞的这么复杂,应该有更好的吧,我记得在其他语言里用:round(12345.6789,2)就可以实现四舍五入到两位小数。

    tips:一般我有一个习惯喜欢用%.2f转换数据 这种情况其实就是四舍五入的。

    相关文章

      网友评论

      • 高大宝isir:请问下 对于不需四舍五入的情况下,方法一为0.120情况下,处理结果为0.11呢?请问有相关解决办法吗
        godgnay:@高大宝isir 你好,确实有你所说的问题,我改了下实现方法你看看,欢迎讨论哈
        高大宝isir:@shengyang_yu 不是 就是0.11后面什么都没有
        godgnay:@高大宝isir 是不是打印出来的是0.119999
      • 猫猫_a011:棒,刚好需要
      • de42b2262f9f:方法一想实现不四舍五入保留两位小数,整数位>=6位就开始出问题
        2557cbbf82a9:请问一下你解决了吗。我也遇到同样的问题,整数位大于6位就会出错
      • aofeilin:学习啦~~~

      本文标题:IOS 四舍五入问题

      本文链接:https://www.haomeiwen.com/subject/knryqttx.html