做过支付功能的朋友,也遇到这样的坑:后台返回某件商品的价格或者某笔账单总数的时候,是一个字符串,而字符串是不能直接加减乘除的,我们必须先转化为数据结构类型再计算。看下面一段代码:
NSString *string = @"123.456";
NSLog(@"%f=====%.2f",string.floatValue,string.floatValue);
//输出结果是:123.456001=====123.46
从上面的结果看,虽然有点变化好像没什么影响似的,我们再看下面
NSString *string = @"12345678910.40";
NSLog(@"%f=====%.2f",string.floatValue,string.floatValue);
//输出结果:12345678848.000000=====12345678848.00
这回,输出的结果跟想象中的区别就很大了。我们可以得出这么一些结论
1、float的有效位数是8位,剩余的随机
2、float会四舍五入
这两个弊端是很大的BUG(+--+,项目中就有偶尔出现缺1分钱的BUG)
“全能乔”早就知道情况的出现,所以封装了NSDecimalNumber类负责货币这种敏感数字的运算,具体的使用方法建议看看这位大神的介绍:
http://www.jianshu.com/p/4703d704c953
NSDecimalNumber类设置样式:
http://www.ithao123.cn/content-8054207.html