有时候不得不承认,细心观察生活中的细节,有时候会得到很多。

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

我的代码是这样的:
//        三个人订餐需要的平台费用
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中浮点型的计算的更多相关文章

  1. Java中浮点型数据Float和Double进行精确计算的问题

    Java中浮点型数据Float和Double进行精确计算的问题 来源  https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失     ...

  2. OC中控制台日志打印

    OC中Debug版本常用的打印格式化操作   %@ 对象   %d,%i 整型 (%i的老写法)   %hd 短整型   %ld , %lld 长整型   %u 无符整型   %f 浮点型和doubl ...

  3. OC中面向对象2

    一. 定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现 ...

  4. OC基础--OC中的类方法和对象方法

    PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1 ...

  5. 编译时和运行时、OC中对象的动态编译机制

    编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字 ...

  6. objective-c中字符串长度计算

    我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...

  7. OC中的枚举类型

    背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...

  8. OC中NSLog函数输出格式详解

    OC中NSLog函数输出格式详解 %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p ...

  9. OC中的结构体

    一.结构体 结构体只能在定义的时候进行初始化 给结构体属性赋值    + 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称)    +定义一个新的结构体,进行直接赋值    + ...

随机推荐

  1. 怎样在Ubuntu Scope中定义设置变量并读取

    在本遍文章中,我们来解说怎么对我们的Ubuntu Scope进行设置.对Scope而言,有些时候我们希望可以使用设置来改变我们的显示.或对我们的搜索进行又一次定义.关于很多其它Scope的开发,请參阅 ...

  2. nginx+redis实现session的共享

    上一篇我们介绍了nginx实现的负载均衡和动静分离,可看这边. 我们在文章的末尾说到,负载均衡需要面临的一个问题是内存数据的同步.例如:我有A,B两台服务器做了负载均衡,当我在A服务器上执行了登录并且 ...

  3. MongoDB 数据库备份与恢复

    1.MongoDB数据库备份     1.语法:         mongodump -h dbhost -d dbname -o dbdirectory         参数说明:         ...

  4. 带你深度解析Maven

    一.What`s Maven? Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说 ...

  5. 配置SQL Server on Linux(1)

    1. 背景 SQL Server一般是在安装过程中进行相关的配置,安装完成之后,再去修改有一些配置就比较麻烦,比如更改SQL Server实例级别的排序规则.但在Linux下,安装过程并没有很多可以配 ...

  6. 如何在阿里云linux上部署java项目

      前2天把git练了下,敲了很多命令,也借助图形界面增强自己的理解,乘着余热把linux在熟悉下.然后想起以前婷主有让我帮忙搭建的阿里云服务器,所以就想自己试着在阿里云的linux上搭建自己的jav ...

  7. 学习ABP ASP.NET Core with Angular 环境问题

    1. 前言 最近学习ABP架构 搭建ASP.NET Core with Angular遇到了些问题,折腾了一个礼拜最终在今天解决了,想想这个过程的痛苦就想利用博客记录下来.其实一直想写博客,但因为 时 ...

  8. 【WebGL】《WebGL编程指南》读书笔记——第2章

    一.前言 最近看了<WebGL编程指南>这本书,发现还是很有意思的,故每章阅读后做个笔记. 二.正文 Example1:在canvas中绘制矩形 <!DOCTYPE html> ...

  9. jsDOM编程-乌龟抓小鸡游戏

    <html> <head>  <title>js乌龟抓小鸡游戏 </title>    <meta http-equiv="conten ...

  10. dd 命令详解

    作用: dd 是一个Unix和类Unix系统中的命令, 主要功能为转换和赋值文件.在Unix和类Unix系统上, 硬件的设备驱动(如硬盘) 和特殊设备文件(如/dev/zero, /dev/rando ...