关于OC中浮点型的计算

有时候不得不承认,细心观察生活中的细节,有时候会得到很多。
今天和公司朋友一起订了外卖,因为要分账,就突发奇想用代码来算出每个人花了多少钱。最后发现以前没有注意的细节或者不知道的知识,记录下。

我的代码是这样的:
//        三个人订餐需要的平台费用
        CGFloat transMoney = (11.5 + 7 - 28)/3;
//        一个饼的价格
        CGFloat singlePingMoney = 21/6;
// 每个人吃饭的费用  总额是61.5
       CGFloat value = (15+singlePingMoney)+transMoney ;
        CGFloat value1 = (14+singlePingMoney*2)+transMoney;
        CGFloat value2 = (14+singlePingMoney*3+7)+transMoney;
        NSLog(@"value = %.2f",value);
        NSLog(@"value = %.2f",value1);
        NSLog(@"value = %.2f",value2);
        NSLog(@"value = %.2f",value2+value1+value);

打印:
打印结果

问题:代码出来的总额和实际总额不相符,而且相差甚远。
分析:

应该是变量计算中出现了误差,于是打印各个变量值。

//        三个人订餐需要的平台费用
        CGFloat transMoney = (11.5 + 7 - 28)/3;
//        一个饼的价格
        CGFloat singlePingMoney = 21/6;
        NSLog(@"transMoney = %.2f",transMoney);
        NSLog(@"singlePingMoney = %.2f",singlePingMoney);

结果:
打印结果

分析:

结合打印的结果和代码,
transMoney 的值是正确的
singlePingMoney 的值应该有所偏差
改写代码为:

 // 一个饼的价格  
CGFloat singlePingMoney = 21/6.f;
NSLog(@"singlePingMoney = %.2f",singlePingMoney);

打印:
打印结果

观点:
在OC除法计算中不能明切除数与被除数为整数时,得到的结果为整数。

论证:
1.当都是没有声明为浮点型时
代码:

   CGFloat tempNum = (5 + 5)/3;
   NSLog(@"tempNum = %.2f",tempNum);

打印:
打印结果

2.当都有一个声明为浮点型时
代码:

        CGFloat tempNum = (5.f + 5)/3;
        NSLog(@"tempNum = %.2f",tempNum);
//或者
        CGFloat tempNum = (5.0 + 5)/3;
        NSLog(@"tempNum = %.2f",tempNum);

打印:
打印结果

最后论证了刚才的观点,那么修改初始代码并打印

        //        三个人订餐需要的平台费用
        CGFloat transMoney = (11.5 + 7 - 28)/3;
        //        一个饼的价格
        CGFloat singlePingMoney = 21/6.f;
        // 每个人吃饭的费用  总额是61
        CGFloat value = (15+singlePingMoney)+transMoney ;
        CGFloat value1 = (14+singlePingMoney*2)+transMoney;
        CGFloat value2 = (14+singlePingMoney*3+7)+transMoney;
        NSLog(@"value = %.2f",value);
        NSLog(@"value1 = %.2f",value1);
        NSLog(@"value2 = %.2f",value2);
        NSLog(@"values = %.2f",value2+value1+value);

打印结果

结果与总金额一致,即计算时,要在不同情境下注意浮点型的计算方法。

   
   
   

友情链接:

技术博客        简书主页

原文地址:https://www.cnblogs.com/tig666666/p/8275565.html