加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oc和swift实现算法:把 x 数字精确到小数点后第 p 位,不足 p 位

发布时间:2020-12-14 05:59:27 所属栏目:百科 来源:网络整理
导读:题目: 把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入 用Objective-C实现: ///把 x 数字精确到小数点后第 p 位,不足 p 位补 0,然后四舍五入- (NSString *)number:(NSString *)x preciseDecimal:(NSUInteger)p {// 四舍五入 NSDecimalNumb

题目:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读