iOS开发 — 小数float四舍五入

float 四舍五入

  • 项目需要一个四舍五入的小功能
  • 简单的说一下,经常用到的方法和问题

先定义一个浮点数类型num

float num = 5.672;

#####方法一
也是最直接的方法

强制转换为int类型 (int)num 或者[num intValue],这种方法的问题在于, 它直接去掉了小数点后面的数字 打印结果为 5,不会帮你四舍五入。

#####方法二

网上常用的方法之一, 先定义一个方法。

//number:需要处理的数字, position:保留小数点第几位,四舍五入

+(NSString *)roundUp:(float)number afterPoint:(int)position;

在.m文件中实现方法

+(NSString *)roundUp:(float)number afterPoint:(int)position{
    NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
    NSDecimalNumber *ouncesDecimal;
    NSDecimalNumber *roundedOunces;
    ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:number];
    roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
    return [NSString stringWithFormat:@"%@",roundedOunces];
}

调用方法

    NSString *sv = [self notRounding:num afterPoint:2];
    NSLog(@"sv = %@",sv);
输出结果为:sv = 5.67

这种方法同样一夜游一个问题, 在将==position==设置位0的时候, 他也不会四舍五入, 只会向上晋级 打印结果为 6

#####方法三(推荐)

也是最简单的方法,系统自带的round函数,直接调用它(int)roundf(float或者double类型的数据)

(int)roundf(num)输出结果为 5.67,将num改为5.678 输出结果则是5.68

严格的说四舍五入的话还是应该用round,不过上面两种方法,在其他特殊的时候也可以尝试使用,比如只需要前边整数,或者需要晋级的数。

文 / yimouleng
LEAVE A REPLY
总访问数 332
loading