VUE 数据转化为千分位符 保留两位小数不进行四舍五入直接全部舍去

接的上周发的VUE 鼠标失焦事件数据改变但前端页面不渲染问题解决后续bug问题及解决

问题

当写完之后测试的时候测出来了一个问题,当输入55555的时候应该千分位格式为5.55万元,结果保存后显示的是5.56万元,查看数据库后发现存的是55555,那就只能是显示转换时候的问题了,在前端debugger下一段一段排查,发现了问题所在
debugger

解析

var numf = Number(f).toFixed(2);

在主后端的思想下,我习惯性的点开了它的源码想在源码中找到解决问题的方法
toFixed源码注释
但是它源码只有用法,没有过深的解析什么的

js的Number.toFixed()实际的精度确认规则是四舍六入五成双
逢四下舍,逢六入一,
逢五时,如果后面一位数值小于五的话,就舍去不进一
当后面一位数值等于大于五的话,就进一

于是乎,最后的结果被四舍五入了(令人头疼的东西)

解决

问题找到了,解决了很简单了,不使用这个方法,新写一个这里不会进行四舍五入的方法,这里引用一下大佬的方法博客:

https://blog.csdn.net/qq_42127308/article/details/80388398 点进进入

filters: {
  numFilter (value) {
    let realVal = ''
    if (!isNaN(value) && value!== '') {
      // 截取当前数据到小数点后三位
      let tempVal = parseFloat(value).toFixed(3)
      realVal = tempVal.substring(0, tempVal.length - 1)
    } else {
      realVal = '--'
    }
    return realVal
  }
}

但是大佬这里也说了

此处存在一个问题,当源数据小数点第三位为数字9,并且第四位会导致第三位进位的情况下,得到的最终数据仍然不是截取 eg: 3.1798 截取两位会变成3.18

于是乎想了耍了点小聪明,如果截取四位,只能两位呢

var numfTemp = Number(f).toFixed(4);
var numf = numfTemp.substring(0,numfTemp.length-2);

用了4999999999和499作为测试,输出的是49,999.99和0.04 (因为输入的时候是以元为单位,查看的时候以万元为的单位)

这样写如果有什么问题的话、或者有什么更好的办法的话请大佬指教,我也会再进行更多的测试的(抱拳感谢提醒)

白:其实这个bug解决应该上周五连同上一篇一起发的,结果那篇写完这篇还没有写的,下班时间就到了,就先下班了哈哈哈哈哈哈哈哈哈,留着现在才写的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值