美文网首页iOS开发
关于OC中浮点型的计算

关于OC中浮点型的计算

作者: 刘勇虎 | 来源:发表于2018-01-12 14:22 被阅读11次

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

我的代码是这样的:
//        三个人订餐需要的平台费用
        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);
打印结果

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

   
   
   

友情链接:

技术博客        简书主页

相关文章

  • 关于OC中浮点型的计算

    有时候不得不承认,细心观察生活中的细节,有时候会得到很多。今天和公司朋友一起订了外卖,因为要分账,就突发奇想用代码...

  • iOS使用NSLog输出各数据类型的占位符归纳

    一、OC中数据类型1)基本数据类型:整型、字符型、浮点型(double、float)、枚举型; 2)构造类型:数组...

  • 笔记

    一、OC基本语法 //整型 NSInteger a = 10; //浮点型 CGFloat b = 2.3; //...

  • 最完美的浮点数计算

    浮点型计算 在JavaScript中,整数和浮点数都属于Number类型,它们都统一采用64位浮点数进行存储。 虽...

  • 2018-08-23 day4-循环和分支

    1.数据类型转换 自动转换 整型与浮点型数计算转换为浮点型 整型与bool型(0和1)计算转换为整型 强制转换 语...

  • Python基础知识-数据类型

    基本数据类型 整形 浮点型 字符串 布尔型 空值。 整整:非小数包括零。 浮点型:带小数位的数字。浮点数计算有误差...

  • Z_HPC_存储

    计算密集型、浮点计算密集型、数据密集型、网络密集型 高性能计算和数据密集型计算的存储的差异? 根据应用领域的不同,...

  • 数据类型

    OC 数据类型 基本数据类型数值型整数类型浮点型字符型(char)布尔型 (BOOL)空类型 (void) Blo...

  • python数据类型和变量

    数据类型 和OC中的基本一样的,整数,浮点型,字符串,\和\n和OC中的语法一样。\t是制表符,可以使用...多行...

  • 浮点型计算的问题

    浮点型计算有时会出现十几位的小数点 解决方法: var a = 1.23, b = 4.745, digit = ...

网友评论

    本文标题:关于OC中浮点型的计算

    本文链接:https://www.haomeiwen.com/subject/poxfoxtx.html