zoukankan      html  css  js  c++  java
  • 关于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);
    

    打印结果

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

       
       
       

    友情链接:

    技术博客        简书主页

  • 相关阅读:
    Java正则表达式教程及示例
    MySQL 事务
    MySQL 正则表达式
    常用函数 __MySQL必知必会
    使用MySQL正则表达式 __MySQL必知必会
    首先使用flex制作table
    javascript原生调用摄像头
    网页背景图片随机
    网页背景视频的实现
    网站无法显示logo?
  • 原文地址:https://www.cnblogs.com/tig666666/p/8275565.html
Copyright © 2011-2022 走看看