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

结果与总金额一致,即计算时,要在不同情境下注意浮点型的计算方法。
友情链接:
技术博客 简书主页
关于OC中浮点型的计算的更多相关文章
- Java中浮点型数据Float和Double进行精确计算的问题
Java中浮点型数据Float和Double进行精确计算的问题 来源 https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失 ...
- OC中控制台日志打印
OC中Debug版本常用的打印格式化操作 %@ 对象 %d,%i 整型 (%i的老写法) %hd 短整型 %ld , %lld 长整型 %u 无符整型 %f 浮点型和doubl ...
- OC中面向对象2
一. 定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现 ...
- OC基础--OC中的类方法和对象方法
PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1 ...
- 编译时和运行时、OC中对象的动态编译机制
编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字 ...
- objective-c中字符串长度计算
我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...
- OC中的枚举类型
背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...
- OC中NSLog函数输出格式详解
OC中NSLog函数输出格式详解 %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p ...
- OC中的结构体
一.结构体 结构体只能在定义的时候进行初始化 给结构体属性赋值 + 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称) +定义一个新的结构体,进行直接赋值 + ...
随机推荐
- hdu1181 变形课(vector容器+dfs)
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submi ...
- C++学习笔记24,方法重写与方法隐藏
该博文仅用于交流学习.请慎用于不论什么商业用途.本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 方法重写.是指在子类中又一 ...
- [UWP]了解模板化控件(6):使用附加属性
1. 基本需求 之前的ContentView2添加了PointerOver等效果,和TextBox等本来就有Header的控件放在一起反而变得鹤立鸡群. 为了解决这个问题,这次把ContentView ...
- tomcat启动端口号报错java.net.BindException: Cannot assign requested address
异常信息 时间:2017-02-09 15:09:59,829 - 级别:[ERROR] - 消息: [other] Failed to start end point associated with ...
- utf8、unicode与gbk
中国人民通过对 ASCII 编码(对于英文字母8位)的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字. 汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK (汉字:两个字 ...
- MVC+EF 入门教程(三)
一.前言 上一节,我们将了生成数据库,那么这张我就将操作设计库. 二.在 Aplication 定义服务 在 Application 中添加文件夹(Blog)和 操作类(BlogServer).实例如 ...
- Java中参数传递问题
Java中参数传递可以分为值传递和引用传递,话不多说直接撸代码 1.传原始类型(int,String等)数据是值传递 package test_1; public class Test { publi ...
- wordpress 登录实例(一)
wordpress搭建参考 关于wordpress环境的搭建,地址是:http://easonhan007.github.io/2014/04/08/install-wamp-and-wordpres ...
- Linux:如何进行c++编程
不适应美帝的饮食,当一只咸鱼在apartment里Coding一波,学习学习如何在Ubuntu实现C++的编程 正文如下: (预备知识) 学习Vim: http://www.cnblogs.com/ ...
- 二叉树Bynary_Tree(2):二叉树的递归遍历
7/18/2017 正在码,理解完就写博 7/21/2017 终于码完,借助链表实现的队列撸一个二叉树对于我来说有难度,撸了两天没有成果,我最后选用的是数组实现的循环队列去撸一个二叉树 正文如下: 以 ...