• ios %.2f是四吗?你真的了解ios的规则吗?

    最近做项目时遇到了一个很有意思的问题,直接看图吧!


    看看神奇吧,当时我就懵逼了,难道是我的数学没学好???

    根据小学时学的数学知识,老师告诉我们四舍五入的原则是:看下一位的数字如果小于或者等于4那么就舍去,如果大于等于5那就进一位,那么根据这个原则,0.125保留两位小数就是0.16,然而在ios里面四舍五入的原则并非这样,看图就明白了,安卓里面也是这样(我让安卓的哥们测试了下得到了同样的结果),对于这个问题,大家怎么看?

    展开全文
  • iOS 常用的向上取整,向下取证,四函数。x为我们要计算的数字。 第一个:向上取整:ceil(x),返回小于x的最小整数; //例如:1.234, 运算完以后,结果等于:2 如果想要 1.234 变成 1.24,我们可以这么...

    iOS 常用的向上取整,向下取证,四舍五入函数。x为我们要计算的数字。

    第一个:向上取整:ceil(x),返回不小于x的最小整数;

    //例如:1.234, 运算完以后,结果等于:2

    如果想要 1.234 变成 1.24,我们可以这么做    

    ceil(1.23 * 100)/100    floor同理

    第二个:向下取整:floor(x),返回不大于x的最大整数;

    //例如:1.234, 运算完以后,结果等于:1

    第三个:四舍五入:round(x)

    //例如:1.234, 保留两位 运算完以后,结果等于:1.23,

    //例如:1.235, 保留两位 运算完以后,结果等于:1.25

    第四个:截尾取整函数:trunc(x)

    //例如:1.234, 运算完以后,结果等于:1

    展开全文
  • 通常我们四输出可能你会用NSString stringWithFormat函数%.2f方式,但是这个四有时可能不是四,而是五。其实有更精确的四方式。 先说一下最后确定使用的方法:(四,...

    通常我们四舍五入输出可能你会用NSString stringWithFormat函数%.2f方式,但是这个四舍五入有时可能不是四舍五入,而是五舍六入。其实有更精确的四舍五入方式。


    先说一下最后确定使用的方法:(四舍五入,保留两位小数)

    -(float)roundFloat:(float)price{

        return roundf(price*100)/100;

    }

    (保留1位小数100改为10,以此类推)

    下面再说说这个曲折的过程,首先我想到的是用ios里面自带的round方法,

    -(float)roundFloat:(float)price{

        return roundf(price);

    }

    但是如下举例

    float test = 23.625;

    float test2 = 23.6250;

    float test3 = 23.6251;

    test = [self roundFloat:test];

    test2 = [self roundFloat:test2];

    test3 = [self roundFloat:test3];

        

    NSLog(@"test:%.2f",test);

    NSLog(@"test2:%.2f",test2);

    NSLog(@"test3:%.2f",test3);

    得出结果:

    test:24.00

    test2:24.00

    test3:24.00


    很显然不是我想要的效果,经过改进便是如下结果,

    -(float)roundFloat:(float)price{

        return roundf(price*100)/100;

    }


    有人说此方法不知在什么数据情况下会不准,还有个更保险的方法:

    -(float)roundFloat:(float)price{

        return (floorf(price*100 + 0.5))/100;

    }



    iOS中round/ceil/floorf函数略解

    extern float ceilf(float);

    extern double ceil(double);

    extern long double ceill(long double);


    extern float floorf(float);

    extern double floor(double);

    extern long double floorl(longdouble);


    extern float roundf(float);

    extern double round(double);

    extern long double roundl(longdouble);


    round:如果参数是小数,则求本身的四舍五入。
    ceil:如果参数是小数,则求最小的整数但不小于本身.(向上取整)
    floor:如果参数是小数,则求最大的整数但不大于本身. (向下取整)

    Example:如何值是3.4的话,则

    3.4 -- round 3.000000

        -- ceil 4.000000

        -- floor 3.00000



    展开全文
  • IOS 关于四

    2015-04-20 11:18:47
    如何只舍不入。比如 float price = 0.126,怎么样才能得到0.12? 当然,通过字符串截取的办法肯定也能达到相同的效果。但是就是这么一个简单的问题要通过一些判断和截取才能获得结果,总感觉有点笨拙。 下面...

    如何只舍不入。比如 float price = 0.126,怎么样才能得到0.12?

    当然,通过字符串截取的办法肯定也能达到相同的效果。但是就是这么一个简单的问题要通过一些判断和截取才能获得结果,总感觉有点笨拙。

    下面先给出该问题的解决办法:

     

    -(NSString *)notRounding:(float)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];

        [ouncesDecimal release];

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

    }

    介绍一下参数:

    price:需要处理的数字,

    position:保留小数点第几位,

    然后调用

     

        float s =0.126;

        NSString *sv = [self notRounding:s afterPoint:2];

        NSLog(@"sv = %@",sv);

    输出结果为:sv = 0.12

     

    接下来介绍NSDecimalNumberHandler初始化时的关键参数:decimalNumberHandlerWithRoundingMode:NSRoundDown,

    NSRoundDown代表的就是 只舍不入。

    scale的参数position代表保留小数点后几位。

     

    如果只入不舍怎么办,比如,float 0.162 想要得到0.17该怎么做?,在开发文档上有这样一个表,是按照保留小数点后一位处理的。相信大家一看就明白了:


     

    方法二:

    1round(12345.6789) 结果为:12346

    2round(12345.6789*100)/100 结果为:12345.68

    第二个是我要的结果,但是我不明白这么个简单的四舍五入要搞的这么复杂,应该有更好的吧,我记得在其他语言里用:round(12345.67892) 就可以实现四舍五入到两位小数。

     

     

    方法三:

    NSTimeInterval Interval = 305.721125;

     

    NSInteger timeInt = [[NSString stringWithFormat:@"%.0f", Interval] integerValue];

     

     

     

    Interval:305.721125

     

    timeInt:306

    1 NSLog(@"%@", [NSString stringWithFormat:@"%.0f", 1.0003]);
    2 NSLog(@"%@", [NSString stringWithFormat:@"%.0f", 1.9003]);
    3 NSLog(@"%@", [NSString stringWithFormat:@"%.0f", 1.5003]);
    4 NSLog(@"%@", [NSString stringWithFormat:@"%.0f", 1.4003]);
    1       1
    1 1
    1 2
    1 2
    1 1

     

    方法四:

      

    1. /

        //Test "/"
        cout << "Test \"/\"!" << endl;
        cout << "7   / 2   = " << 7/2 << endl;      //3
        cout << "7   / 2.0 = " << 7/2.0 << endl;    //3.5
        cout << "7.0 / 2   = " << 7.0/2 << endl;    //3.5
        cout << "7.0 / 2.0 = " << 7.0/2.0 << endl; //3.5
        cout << "7   / 3   = " << 7/3 << endl;      //2
        cout << endl;

    2. %
        //Test "%"
        cout << "Test \"%\"!" << endl;
        cout << "9   % 3   = " << 9%3 << endl;      //0
        cout << "9   % 4   = " << 9%4 << endl;      //1
        //cout << "9.0 % 3   = " << 9.0%3 << endl;
        //cout << "9   % 3.0 = " << 9%3.0 << endl;
        cout << endl;

    3. 四舍五入
        //Test round()
        cout << "Test \"四舍五入\"!" << endl;
        double dRoundA = 1.4;
        double dRoundB = 1.6;
        double dRoundLowA = -1.4;
        double dRoundLowB = -1.6;
        double dRoundLowC = 0.0;
        cout << dRoundA << " = " << RoundEx(dRoundA) << endl;         //1
        cout << dRoundB << " = " << RoundEx(dRoundB) << endl;         //2
        cout << dRoundLowA << " = " << RoundEx(dRoundLowA) << endl;   //-1
        cout << dRoundLowB << " = " << RoundEx(dRoundLowB) << endl;   //-2
        cout << dRoundLowC << " = " << RoundEx(dRoundLowC) << endl;   //0
        cout << endl;

    double RoundEx(const double& dInput)
    {
        double dIn = dInput;
        if (dInput >= 0.0)    //???
        {
            return int(dIn + 0.5);
        } 
        else
        {
            return int(dIn - 0.5);
        }
    }

    4. ceil() 向上取整
        //Test ceil() 向上取整
        cout << "Test ceil() 向上取整!" << endl; 
        cout << "ceil 1.2 = " << ceil(1.2) << endl;      //2
        cout << "ceil 1.8 = " << ceil(1.8) << endl;      //2
        cout << "ceil -1.2 = " << ceil(-1.2) << endl;    //-1
        cout << "ceil -1.8 = " << ceil(-1.8) << endl;    //-1
        cout << "ceil 0.0 = " << ceil(0.0) << endl;      //0
        cout << endl;

    5. floor() 向下取整
        //Test floor() 向下取整
        cout << "Test floor() 向下取整!" << endl;
        cout << "floor 1.2 = " << floor(1.2) << endl;    //1
        cout << "floor 1.8 = " << floor(1.8) << endl;    //1
        cout << "floor -1.2 = " << floor(-1.2) << endl; //-2
        cout << "floor -1.8 = " << floor(-1.8) << endl; //-2
        cout << "floor 0.0 = " << floor(0.0) << endl;    //0
        cout << endl;

    展开全文
  • - (NSString *)numDisplayStandard:(NSInteger )typeNum  numVerification:(BOOL)isVerification{    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    - (NSString *)numDisplayStandard:(NSInteger )typeNum

                     numVerification:(BOOL)isVerification{

        

        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

        [numberFormatter setNumberStyle:1];

        

        if (typeNum == 0) {

            [numberFormatter setMaximumFractionDigits:0];

        } else if (typeNum == 1) {

            [numberFormatter setMinimumFractionDigits:0];

            [numberFormatter setMaximumFractionDigits:2];

        } else {

            [numberFormatter setMinimumFractionDigits:2];

            [numberFormatter setMaximumFractionDigits:2];

            

            

        }

        [numberFormatter setFormatterBehavior:NSNumberFormatterBehaviorDefault];

        numberFormatter.roundingMode = NSRoundDown;

        id num = [numberFormatter numberFromString:self];

       

        if (isVerification && num) {

            if ([num intValue] < 1 && [num floatValue] > 0.00) {

                num = [NSNumber numberWithInt:1];

            }

            if ([num intValue] == 99) {

                num = [NSNumber numberWithInt:99];

            }

        }

        NSString * numStr = [numberFormatter stringFromNumber:num];

        NSRange pointRange = [numStr rangeOfString:@"."];

        if (pointRange.location + 2 < numStr.length - 1) {

            

            return [numStr substringToIndex:pointRange.location + 2 + 1];

        } else {

            return numStr;

        }

        return numStr;

    }

    展开全文
  • 今天遇到一个问题 服务器返回货币数据 妈的 用string 》 floatvalue 准确 NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler  decimalNumberHandlerWithRoundingMode:NSRoundBank
  • round(x)返回x的四整数值。 之前自己为了根据数据动态的去布局UI,涉及取到到向上取整的结果,自己之前呢,有涉及过这个函数,但是呢,没试出来,无疾而终!今日在各位彭友的帮助下有了结果~! ...
  • #import "ViewController.h"   @interface ViewController ()   @end   @implementation ViewController   - (void)viewDidLoad {  [super viewDidLoad];... NSLog(@"----%@---",[self decimalwithFo
  • 掉小数取整:Math.floor(2)=2 掉小数取整:Math.floor(2.1)=2 掉小数取整:Math.floor(-2.1)=-3 掉小数取整:Math.floor(-2.5)=-3 掉小数取整:Math.floor(-2.9)=-3 四取整:Math.rint(2)=2 四五...
  • C++保留小数位数并四 C++的头文件iomanip定义了许多流操作算子,但是对于平时刷题来说,我们只需要保留小数点位数与四。 单纯的保留小数位数,我一般直接用C语言的占位符完成%.5f,遇见四就用C++的...
  • * 小数 四 * * @param val * @param precision * @return */ public static Double roundDouble(double val, int precision) { Double ret = null; try { double factor
  • //结果为0.468CGFloat tFloat = (CGFloat)375/800;//结果为0CGFloat tFloat = 375/800;//结果为0CGFloat tFloat = 1/0;//结果为+lnf 代表正无穷CGFloat tFloat = (CGFloat)1/0; ...
  • iOS中的数字格式化处理,系统有一个非常好用的类NSNumberFormatter,但是在swift去掉了NS前缀NumberFormatter,用法是一样的,今天我们就来讲一下这个的用法。 NumberFormatter.style数字格式 none四 ...
  • 1,四法 float numberToRound; int result; numberToRound = 5.61; result = (int)roundf(numberToRound); NSLog(@"roundf(%.2f) = %d", numberToRound, result); //输出 roundf(5.61)...
  • IOS 进一法 去尾法 float numberToRound; int result; numberToRound =4.51; result = (int)roundf(numberToRound); NSLog(@"roundf(%f) = %d", numberToRound, result);// roundf(4...
  • iOS手机滚动区域在滑动的手指松开后,滚动立刻停止,失去了原本的流畅滚动特性在css部分加上:-webkit-overflow-scrolling: touch;
  • 先说问题:Description设圆半径r,圆柱高h 求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。...
  • Can anyone tell me how to round a double value to x number of decimal places in Swift? 谁能告诉我在Swift中
1 2 3 4 5 ... 20
收藏数 2,769
精华内容 1,107