美文网首页
NSString 格式化小数引发的bug

NSString 格式化小数引发的bug

作者: YannChee | 来源:发表于2019-04-29 18:15 被阅读0次

最近在做一个播放视频的需求,需要缓存视频播放进度,并把进度值缓存到本地,然后其它地方读取缓存,展示进度;
在写入缓存时,其他同事使用 float 类型的变量接收 计算出的进度值,然后 转换成字符换,使用YYCaChe 缓存字符串;
伪代码如下:

CGFloat progress = maxPlayedTime * 1.0 / totalTime;
NSString *progressStr = [NSString stringWithFormat:@"%.1f",progress];

然后,我在取缓存的时候,就发生了bug,取出的进度跟实际不符;
例如: 实际进度是 0.9 ,实际取出时1.0

那么是什么原因造成的呢?

问题出现在这句 [NSString stringWithFormat:@"%.1f",progress]

[NSString stringWithFormat:@"%.1f",progress] 这句代码表示把一个 浮点数格式化成保留一位小数的字符串; 在格式化的过程中 会自动 "四舍五入"

例如,

  • 真实数据是 0.9523421 保留一位小数后 四舍五入为 1.0
  • 真实数据是 0.9523421 保留两位小数后 四舍五入为 0.95

所以解决这个bug办法有:

  • 增加小数位数 ,比如保留5位小数 (这种方式在精度要求高的场景下还是有类似问题,不推荐)
  • 把float 类型小数包装成NSNumber 保存 (推荐)

相关文章

网友评论

      本文标题:NSString 格式化小数引发的bug

      本文链接:https://www.haomeiwen.com/subject/csjunqtx.html