关于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中的结构体
一.结构体 结构体只能在定义的时候进行初始化 给结构体属性赋值 + 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称) +定义一个新的结构体,进行直接赋值 + ...
随机推荐
- Android用户登录机制安全性的一些思考
1 client要做到安全存贮数据非常难,通过反编译和强攻.仅仅要有心,差点儿都能够破解. 2 服务端相对安全. 3 结合以上两点,推出能做的点是控制灾难规模.每次破解一个client仅仅能针对 ...
- Cygwin-Cygwin ssh Connection closed by ::1 出错
问题描写叙述: Cygwin好不easy安装好了ssh服务,第一连接没有问题,能够显示相关信息 $ ssh localhost Last login: Sat Jul 25 09:00:30 2015 ...
- Mac: Android studio+VirtualBox+Genymotion
针对 Mac Yosemite 10.10.4 操作系统 1.在Android Studio 中preferences 中的Plugins 中安装Genymotion插件. Android Studi ...
- C#设计模式之二十一职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中 ...
- 【 全干货 】5 分钟带你看懂 Docker !
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...
- mybatis关联
title: mybatis关联 date: 2017-12-18 18:00:30 tags: - [mybatis] categories: - [编程] - [开发工具] permalink: ...
- android studio 使用adb命令传递文件到android设备
一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...
- jsp中EL表达式不起作用的问题1
问题:在jsp页面中使用el表达式取值,取不到值,但是使用jsp中嵌套java代码可以取到值,对应代码如下: 解决: 只要在 jsp中 头文件中写上 : <%@page isELIgnored= ...
- .NET 实现Base-64加密解密处理
.NET 实现Base-64加密解密处理 using System; using System.Collections.Generic; using System.Linq; using System ...
- 《如何把事情做到最好》【PDF】下载
<如何把事情做到最好>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382279 内容简介 <如何把事情做到最好>编辑 ...