this.setData({
cash: +value * 100 // 乘100, 将元转化为分
})
}
这段看似没有问题的代码, 提交给后台时, 接口却返回参数值格式不正确...但我们可能不知道的是, 小数十进制转化为二进制的计算方法是, 小数部分*2, 取整数部分, 直至小数部分为0, 如果永远不为零, 在超过精度时的最后一位时0舍入1。...以上论述过程仍有一些疑惑之处
为什么小数转化为二进制后, 52位以后就超过精度了?...阅读完上面一节, 对小数的乘法我们也可以有一些自己的猜测了。
0.57这个数值在存储时, 本身的精度不是很准确, 我们用toPrecision这个方法可以获取小数的精度。...例如本文最初遇到的BUG
const value = Math.round(0.57 * 100);
而我们不太确定精度的浮点数运算, 通用的解决方案都是将小数转化为整数, 进行计算后, 再转化为小数就好了