%.2f是四舍五入吗 ios

2015-12-03 19:20:47 birthmarkqiqi 阅读数 664

今天朋友问我一个问题,就是如何只舍不入。比如 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该怎么做?,在开发文档上有这样一个表,是按照保留小数点后一位处理的。

2016-12-08 09:10:19 sg_zxw 阅读数 3866

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


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

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

2017-05-09 11:32:27 txz_gray 阅读数 3177

通常我们四舍五入输出可能你会用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



2014-04-02 18:17:34 rlpeng 阅读数 1408

NSLog(@".0f---%@",[NSString stringWithFormat:@"%.0f",1.0003]);
NSLog(@".0f---%@",[NSString stringWithFormat:@"%.0f",1.9003]);
NSLog(@".0f---%@",[NSString stringWithFormat:@"%.0f",1.5003]);
NSLog(@".0f---%@",[NSString stringWithFormat:@"%.0f",1.4003]);
    
NSLog(@".1f---%@",[NSString stringWithFormat:@"%.1f",1.0003]);
NSLog(@".1f---%@",[NSString stringWithFormat:@"%.1f",1.0903]);
NSLog(@".1f---%@",[NSString stringWithFormat:@"%.1f",1.0503]);
NSLog(@".1f---%@",[NSString stringWithFormat:@"%.1f",1.0403]);
    
NSLog(@".2f---%@",[NSString stringWithFormat:@"%.2f",1.0003]);
NSLog(@".2f---%@",[NSString stringWithFormat:@"%.2f",1.0093]);
NSLog(@".2f---%@",[NSString stringWithFormat:@"%.2f",1.0053]);
NSLog(@".2f---%@",[NSString stringWithFormat:@"%.2f",1.0043]);


2014-04-02 18:05:46.326 test[30520:90b] .0f---1
2014-04-02 18:05:46.328 test[30520:90b] .0f---2
2014-04-02 18:05:46.328 test[30520:90b] .0f---2
2014-04-02 18:05:46.328 test[30520:90b] .0f---1
2014-04-02 18:05:46.329 test[30520:90b] .1f---1.0
2014-04-02 18:05:46.329 test[30520:90b] .1f---1.1
2014-04-02 18:05:46.330 test[30520:90b] .1f---1.1
2014-04-02 18:05:46.330 test[30520:90b] .1f---1.0
2014-04-02 18:05:46.331 test[30520:90b] .2f---1.00
2014-04-02 18:05:46.331 test[30520:90b] .2f---1.01
2014-04-02 18:05:46.331 test[30520:90b] .2f---1.01
2014-04-02 18:05:46.332 test[30520:90b] .2f---1.00
2018-11-03 18:31:10 sunmaoxiang 阅读数 2478
#include <stdio.h>
int main()
{
    double d = 1.199;
    printf("%.2f", d);
    return 0;
}

输出1.20
如果不想让其四舍五入可以这样:

#include <stdio.h>
#include <math.h>
int main()
{
    double d = 1.199;
    printf("%.2f", floor(d * 100) / 100);
    return 0;
}