美文网首页
iOS 取小数点后面2位自动四舍五入了

iOS 取小数点后面2位自动四舍五入了

作者: 香烟不灭 | 来源:发表于2021-07-02 16:19 被阅读0次

    昨天发现给一个浮点型转百分比的时候会自动四舍五入。

    //测试代码

     NSString *str = @"0.032555";

    DebugLog(@"取值=== %.2f%%",[str floatValue]*100);

    打印: 取值=== 3.26% 

    而我想要的值是 3.25%  后来百度了下解决方案:


      NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];

        NSDecimalNumber*ouncesDecimal;

        NSDecimalNumber*roundedOunces;

        ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];

        roundedOunces = [ouncesDecimaldecimalNumberByRoundingAccordingToBehavior:roundingBehavior];

        return [NSString stringWithFormat:@"%@",roundedOunces];

    主要设置成 NSRoundDown ,但是后来发现还是有问题,本来是4.56% 结果取出来是4.55%。 最后自己写了一个方法


    我的方案如下:

    #pragma mark -- float不自动四舍五入

    ///float不自动四舍五入

    /// @param price 数字字符串

    /// @param position 转百分比 取小数点后几位

    -(NSString*)notRounding:(NSString*)price afterPoint:(int)position{

    //

    //    NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];

    //

    //    NSDecimalNumber *ouncesDecimal;

    //

    //    NSDecimalNumber *roundedOunces;

    //

    //    ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];

    //

    //    roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];

    //

    //    return [NSString stringWithFormat:@"%@",roundedOunces];

        NSString*result =@"";

        price = [NSString stringWithFormat:@"%f",[price doubleValue]*100];

        if([price containsString:@"."]) {//有小数点

            NSArray *array = [price componentsSeparatedByString:@"."];

            NSString*lastStr = array.lastObject;

            if(lastStr.length>position) {//小数点后的值的位数大于要取的位数,直接截取

                lastStr = [lastStr substringToIndex:position];

            }else{//小数点后的值的位数小于要取的位数,不够补零

                NSInteger count =  lastStr.length- (position);

                NSString*zeroStr =@"";

                for(int i =0; i < count; i++) {

                    zeroStr = [NSString stringWithFormat:@"%@0",zeroStr];

                }

                lastStr = [NSString stringWithFormat:@"%@%@",lastStr,zeroStr];

            }

            result = [NSString stringWithFormat:@"%@.%@",array.firstObject,lastStr];

        }else{//没小数点的数,小数点后面 补零

            NSString*lastStr =@"";

            for(int i =0; i < position; i++) {

                lastStr = [NSString stringWithFormat:@"%@0",lastStr];

            }

            result = [NSString stringWithFormat:@"%@.%@",price,lastStr];

        }

        return  [NSString stringWithFormat:@"%@%%",result];;

    }

    取出来的值就正常了

    相关文章

      网友评论

          本文标题:iOS 取小数点后面2位自动四舍五入了

          本文链接:https://www.haomeiwen.com/subject/fxtyultx.html