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"
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值