今天,产品同学兴致冲冲的给我提了个小小的需求,面带微笑的说:小哥哥小哥哥,由于韩元的汇率很低,能不能把韩元的估值小数位精确到两位有效的精度?
具体我来解释一下,例如:0.0002345要处理成0.00023,0.0112345处理成0.011,就是说小数点后最多只能看到两个大于0的数字。
了解到这个问题之后我嘴角微微一笑,小case,不就是字符串的截取么。事实也是如此,字符串动态截取完全能实现这个功能,但是,对于如此懒得我,用腻了字符串截取,抓耳挠腮脑袋里过了很多种想法:正则、NSNumberFormatter、是否有系统函数等等,最终都不行,正则也不支持截取,只能匹配字符串。NSNumberFormatter的功能虽然非常强大,也只能设计精度样式,最小精度、最大精度等等,当然我在翻看系统函数时突然查到strchr(<#const char *__s#>, <#int __c#>),由于之前项目中使用到RAC,里面有个RAC_宏定义,这个强大的宏定义底层有一个#define keypath1(PATH) (((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1)) ,其中就用到strchr()函数。
#define RAC_(TARGET, KEYPATH, NILVALUE) \
[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]
#define keypath(...) \