oc和swift实现算法:把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入

前端之家收集整理的这篇文章主要介绍了oc和swift实现算法:把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

题目:

把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入


用Objective-C实现:

///把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入
- (NSString *)number:(NSString *)x preciseDecimal:(NSUInteger)p {
//    四舍五入
    NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:p raiSEOnExactness:NO raiSEOnOverflow:NO raiSEOnUnderflow:NO raiSEOnDivideByZero:NO];
    NSDecimalNumber *ouncesDecimal = [[NSDecimalNumber alloc] initWithDouble:[x doubleValue]];
    NSDecimalNumber *roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
//    生成需要精确的小数点格式,
//    比如精确到小数点第3位,格式为“0.000”;精确到小数点第4位,格式为“0.0000”;
//    也就是说精确到第几位,小数点后面就有几个“0”
    NSMutableString *formatterString = [NSMutableString stringWithString:@"0."];
    for (NSInteger i = 0; i < p; ++i) {
        [formatterString appendString:@"0"];
    }
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
//    设置生成好的格式,
    [formatter setPositiveFormat:formatterString];
//    然后把这个number 对象格式化成我们需要的格式,
//    最后以string 类型返回结果。
    return [formatter stringFromNumber:roundedOunces];
}


用swift实现:

///把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入
    func preciseDecimal(x : String,p : Int) -> String {
//        为了安全要判空
        if (Double(x) != nil) {
//         四舍五入
            let decimalNumberHandle : NSDecimalNumberHandler = NSDecimalNumberHandler(roundingMode: NSDecimalNumber.RoundingMode(rawValue: 0)!,scale: Int16(p),raiSEOnExactness: false,raiSEOnOverflow: false,raiSEOnUnderflow: false,raiSEOnDivideByZero: false)
            let decimaleNumber : NSDecimalNumber = NSDecimalNumber(value: Double(x)!)
            let resultNumber : NSDecimalNumber = decimaleNumber.rounding(accordingToBehavior: decimalNumberHandle)
//          生成需要精确的小数点格式,
//          比如精确到小数点第3位,格式为“0.000”;精确到小数点第4位,格式为“0.0000”;
//          也就是说精确到第几位,小数点后面就有几个“0”
            var formatterString : String = "0."
            let count : Int = (p < 0 ? 0 : p)
            for _ in 0 ..< count {
                formatterString.append("0")
            }
            let formatter : NumberFormatter = NumberFormatter()
            //      设置生成好的格式,NSNumberFormatter 对象会按精确度自动四舍五入
            formatter.positiveFormat = formatterString
//          然后把这个number 对象格式化成我们需要的格式,
//          最后以string 类型返回结果。
            return formatter.string(from: resultNumber)!
        }
        return "0"
    }

猜你在找的Swift相关文章