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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...