iOS开发填坑-double的转化显示有误

ios开发中,在接收后台数据的时候会先转换为对象,最后转化为我们想要的数据类型.

那么数字是怎么样的一个过程呢??
后台传给我们一个数字,后台可以定义为 Number类型,也可以定义成 String类型.当后台返回来一个NSString类型,在iOS json序列化的时候,会把字符串类型转化为NSString对象.当后台传给我们的是number类型,我们拿到json数据后,会把数据转化成NSNumber对象类型,使用的时候会把NSNumber转化为我们想要的类型.

但是接收数据的时候,我们需要把number转化为NSString类型,会出现转化不准确的现象,比如后台定义了一个82.4,我们接收到数据,并转化为NSString类型,结果会显示出82.39999999999999999.试过几次后发现是double转化为NSNumber的时候除了问题.double表示的字面值和其存储的值一般是不一样的,转化为NSNumber之后,有很大一些数字,在NSNumber的stringValue上会出错。

解决方法:可以是取StringdoubleValue,然后再.2f保留两位小数进行构造字符串。千万不能取floatValuefloatValue在大于15万的浮点数字就会出现不精确了 。而doubleValue在数十亿的范围内都是字面上精确的。

根本解决方法还是让后台的同事把请求返回的数据全部设置为String类型
如果涉及到计算的问题,那就只得乖乖转化为NSDecimalNumber对象了。

在开发中,关于价格金额的计算往往是比较严格的,试想一下,支付宝每次转钱的时候,少转了1分钱,你会开心吗?
在显示金额的时候,最后这些数据都由后台确定,移动端直接显示,不要进行转换.如果必要的时候,真的需要进行计算,请使用NSDecimalNumber来进行计算,这是这是一个高精度的类,专门用于计算金额.

你可能感兴趣的:(iOS开发填坑-double的转化显示有误)