this.setData({
cash: +value * 100 // 乘100, 将元转化为分
})
}
这段看似没有问题的代码, 提交给后台时, 接口却返回参数值格式不正确...在JS中, 无论整数还是小数都是Number类型, 它的实现遵循IEEE 754, 是标准的Double双精度浮点数, 使用固定的64位来表示。
看到这里你可能就不想看下去了。...但我们可能不知道的是, 小数十进制转化为二进制的计算方法是, 小数部分*2, 取整数部分, 直至小数部分为0, 如果永远不为零, 在超过精度时的最后一位时0舍入1。...这些都与64位双精度浮点数是如何存储的有关, 我们放到最后再说。
Why 0.57 * 100 === 56.99999999999999 ?
Why 0.57 * 1000 === 570 ?...而此时, 路总问了我一个问题, 为什么0.57 * 1000 === 570 而不是 569.99999..., 不求甚解的我只能先回答"应该是精度丢失吧"
然而, 我"小小的眼睛里充满了大大的疑惑".