首页 > 编程语言 > 详细

Swift 关于float的误差

时间:2020-01-04 14:58:10      阅读:97      评论:0      收藏:0      [点我收藏+]

           最近接手一个项目,收拾一堆的剩下的烂摊子,有相关金额的部分,现场反应接收到的json数据在显示和计算时,有的时候会有1分钱的误差,关于钱的事情是绝对不可能允许的。原因其实很简单,查看了一下代码,在用MJExtension接收数据时,全部选用的是float类型来接收,在需要使用高精度的时候,我们一定要使用double类型。

           float:单精度浮点;double:双精度浮点。具体的概念表示范围大家可以自己搜,我想说的是,单精度浮点的误差可能要超过我们的想象,看下面一种情况:

技术分享图片         技术分享图片

 

 技术分享图片         技术分享图片

 

技术分享图片        技术分享图片

 

        这三条大概就能看出swift中Double和Float的区别,在金额的表达中float是完全不可用的,swift中Double可以满足我们的正常要求,问题只是在运算过程中,double运算的CPU占用率要高于float,所以在精度要求不高的时候,尽量使用float。

 

         当然swift中表达金额有更高级更可靠的方式,如NSDecimalNumber,这是个精度更高的类,还有一个git上专门负责货币的库https://github.com/flight-school/money,真的有需求要做进出口货币转换的,大家有兴趣可以研究下。 


 

 

 

           

Swift 关于float的误差

原文:https://www.cnblogs.com/SimonDonne93/p/12147630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!