Swift 关于float的误差

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

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

         

 

          

 

        

 

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

 

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


 

 

 

           

posted @ 2020-01-04 14:09  灰熊Grizzly  阅读(526)  评论(0编辑  收藏  举报