• 关于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);
    

    打印结果

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

       
       
       

    友情链接:

    技术博客        简书主页

  • 相关阅读:
    【Hadoop离线基础总结】Hue的简单介绍和安装部署
    【Hadoop离线基础总结】Hue与Mysql集成
    【Hadoop离线基础总结】Hue与Impala集成
    【Hadoop离线基础总结】Hue与Hive集成
    【Hadoop离线基础总结】Hue与Hadoop集成
    【Hadoop离线基础总结】impala简单介绍及安装部署
    centos7启动httpd服务失败:Job for httpd.service failed because the control process exited with error code.
    【Hadoop离线基础总结】Mac版VMware Fusion虚拟机磁盘挂载
    Azkaban无法连接网页
    【Hadoop离线基础总结】流量日志分析网站整体架构模块开发
  • 原文地址:https://www.cnblogs.com/tig666666/p/8275565.html
Copyright © 2020-2023  润新知