美文网首页
iOS 字符串浮点运算及四舍五入处理

iOS 字符串浮点运算及四舍五入处理

作者: herui201211 | 来源:发表于2016-11-10 21:51 被阅读234次

    �需求:�将字符串"12349999"转为字符串"1234.99w"。

    首先想到的是先将字符串转为数值,再除去10000,最后拼接字符串。代码如下:

      NSString *ret = [NSString stringWithFormat:@"%.2fw", [@"12349999" longLongValue] / 10000.0];
      NSLog(@"%@", ret);
    
    输出:1235.00w输出:1235.00w

    结果居然是这个😱 😱。。我勒个去,,,Xcode你不爱我了吗??

    ~
    ~
    ~

    于是,“众里寻它千百度,蓦然回首,那人却在灯火阑珊处。” 发现了这个:
    NSDecimalNumber
    NSDecimalNumberHandler
    看了下大概是�可以对小数进行运算及小数位的舍入处理。ok 开撸!!

        //需要参与运算的两个数
        NSDecimalNumber *num = [NSDecimalNumber decimalNumberWithString:@"12349999"];
        NSDecimalNumber *w = [NSDecimalNumber decimalNumberWithString:@"10000"];
        
        //运算结果处理:小数精确到后2位,其余位无条件舍弃
        NSDecimalNumberHandler *handler = [NSDecimalNumberHandler
                                           decimalNumberHandlerWithRoundingMode:NSRoundDown//要使用的舍入模式
                                           scale:2             //结果保留几位小数
                                           raiseOnExactness:NO //发生精确错误时是否抛出异常,一般为NO
                                           raiseOnOverflow:NO  //发生溢出错误时是否抛出异常,一般为NO
                                           raiseOnUnderflow:NO //发生不足错误时是否抛出异常,一般为NO
                                           raiseOnDivideByZero:YES];//被0除时是否抛出异常,一般为YES
        
        //将两个数进行除法运算,并对结果加以处理(handler)
        num = [num decimalNumberByDividingBy:w withBehavior:handler];
        NSString *ret = [NSString stringWithFormat:@"%@w", num];
        NSLog(@"%@", ret);
    
    输出:1234.99w输出:1234.99w

    搞定收工!!


    最后说下当NSRoundingMode取值为NSRoundBankers的时候,代表的是“四舍六入五成双”。 看的几篇博客都没给说说清楚😥 😥 。。

    /*************** Type definitions  ***********/
    
    // Rounding policies :
    // Original
    //    value 1.2  1.21  1.25  1.35  1.27
    // Plain    1.2  1.2   1.3   1.4   1.3
    // Down     1.2  1.2   1.2   1.3   1.2
    // Up       1.2  1.3   1.3   1.4   1.3
    // Bankers  1.2  1.2   1.2   1.4   1.3
    
    typedef NS_ENUM(NSUInteger, NSRoundingMode) {
        NSRoundPlain,   // Round up on a tie  ###四舍五入
        NSRoundDown,    // Always down == truncate ###只舍不入
        NSRoundUp,      // Always up ###只入不舍
        NSRoundBankers  // on a tie round so last digit is even ###四舍六入五成双
    };
    
    

    相关文章

      网友评论

          本文标题:iOS 字符串浮点运算及四舍五入处理

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