【Objective-c】 货币计算类 NSDecimalNumber

做过支付功能的朋友,也遇到这样的坑:后台返回某件商品的价格或者某笔账单总数的时候,是一个字符串,而字符串是不能直接加减乘除的,我们必须先转化为数据结构类型再计算。看下面一段代码:

    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类负责货币这种敏感数字的运算,具体的使用方法建议看看这位大神的介绍:
//www.greatytc.com/p/4703d704c953

NSDecimalNumber类设置样式:
http://www.ithao123.cn/content-8054207.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,041评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,449评论 0 4
  • 第一章 偶遇 “像!太像了!“苍龙盯着远处拉行李箱的那个背影,情绪不受控制地激动起来。三步并两步上前朝着背影追去。...
    曼箬漓阅读 3,520评论 3 10
  • 缤纷的色彩是涂抹在调色盘上的璀璨 更是跳跃于校园景色里的绚烂 世间有好多好多的颜色 我未必都叫得出名字 然而 展现...
    小包包杂记阅读 1,683评论 0 0