swift Double 四舍六入五单双

9 篇文章 0 订阅

四舍六入五单双的官方结束如下:“四舍六入五单双”的法则:即看要保留的有效数字后一位数字,如果大于5,向前进一位,小于4则舍去.等于5则看5后,如5后不全为0,则进一位.5后全为零则看5前,若为奇,则进1,若为偶,则舍去.
但是swift中似乎并不是这样,我举个例子说明:

class func doubleToString(value:Double,point:Int)->String{
      return   NSString(format: "%.\(point)f", value) as String
    }

print(Common.doubleToString(12.6225, point: 3)) //12.623
print(Common.doubleToString(12.6215, point: 3)) //12.621
注释后面跟着的就是打印值,和定义的规则似乎有出入。

那么,还有一点很奇怪的现象就是:
var sum:Double = 0
下面的值分别是:13.51,11.51,12.51,13.51,因为需要统一保留三位小数,所以我丧心病狂的使用了上面的方法把这些数据转成了“13.510”,“11.510”,“12.510”,“13.510”
然后再使用sum = sum + Double(v)! 求和
再然后 let s = Common.doubleToString(sum/4.0, point: 3)
无数次循环下,答案居然出现了12.623 /12.622交替随机出现的情况。
打印su m/4.0得到的答案是12.6225,直接打印Common.doubleToString(12.6225, point: 3)打印出的结果始终都是12.623,直接打印Common.doubleToString(50.49/4.0, point: 3)打印出的结果也是依然坚持12.623,并无任何随机情况出现。于是,所以我开始推测,sum和50.49既然有不同的结果,就说明两个值并不是完全相等,那么最可能的差距在哪里,就是小数位保留。
于是采用如下方式:

let st = Common.doubleToString(sum, point: 3)
let s = Common.doubleToString(Double(st)!/Double(c), point: 3)

果然答案始终是12.623,再无任何随机现象出现。
我没办法解释这个事情,先记下来,以后有了新的领悟再来修改吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值