收到产品经理的埋点需求如下:
关于文档中变量类型为小数的,需要按照文档,不要将变量改为字符串,保留小数点后两位,四舍五入,如传递值为整数,直接传递整数值即可,如值为99,直接传递99即可。
然后我就开整了:
我直接将后台获取来的数据转成fload直接传给接口,然后抓到的数据都是带精度的后面小数位都会有好多零。

后台就会收到这样的数据。因为我用float接收的数据,因为精度的问题后面补零。
在网上搜了好多文章都是让转成字符串传给后台,但是现在统计这块就必须传小数。

在尝试了很多办法后,找到这篇文章https://blog.csdn.net/liudan302698481/article/details/52168192
内容就是使用NSDecimalNumber,我按照文中方法尝试得到同样的结果
-(float)roundFloat:(float)price{
NSString *temp = [NSString stringWithFormat:@"%.7f",price];
NSDecimalNumber *numResult = [NSDecimalNumber decimalNumberWithString:temp];
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
decimalNumberHandlerWithRoundingMode:NSRoundBankers
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
return [[numResult decimalNumberByRoundingAccordingToBehavior:roundUp] floatValue];
}

没法办法继续研究,发现上面的办法后面floatValue有走了我的老路,于是想着能不能不转float直接传NSDecimalNumber。竟然成功了。
后台接到的数据如下:


而且数据还会四舍五入,指定小数精度等等,这里就不做赘述了,想详细了解的朋友直接百度搜NSDecimalNumber,一大堆文章向你扑来。
最后给自己来一针鸡血,做技术不要怕错,不要说不行,要大胆的尝试,没有技术解决不了的问题,哈哈!!!

网友评论