VUE--保留小数(过滤器)

1.cutOutNum.js

javascript 复制代码
export const cutOutNum = (num, decimals) => {
  if (isNaN(num) || (!num && num !== 0)) {
    return "-";
  }

  function toNonExponential(_num) {
    var m = Number(_num)
      .toExponential()
      .match(/\d(?:\.(\d*))?e([+-]\d+)/);
    return Number(_num).toFixed(Math.max(0, (m[1] || "").length - m[2]));
  }

  // 为了兼容科学计数法的数字
  num = toNonExponential(num);
  // 获取小数点的位置 + 1(不存在小数点的indexOf值为-1)
  const pointIndex = String(num).indexOf(".") + 1;
  // 获取小数点后的个数(需要保证有小数位)
  const pointCount = pointIndex ? String(num).length - pointIndex : 0;

  // 补零函数
  function zeroFill(zeroNum, num) {
    for (let index = 0; index < zeroNum; index++) {
      num = `${num}0`;
    }
    return num;
  }
  // 源数据为"整数"或者小数点后面小于decimals位的作补零处理
  if (pointIndex === 0 || pointCount <= decimals) {
    let tempNumA = num;
    // 区分"整数"和"小数"的补零
    if (pointIndex === 0) {
      tempNumA = `${tempNumA}.`;
      tempNumA = zeroFill(decimals - pointCount, tempNumA);
    } else {
      tempNumA = zeroFill(decimals - pointCount, tempNumA);
    }
    return Number(tempNumA) === 0 ? 0 : tempNumA;
  }

  // 截取当前数据到小数点后decimals位
  const Int = String(num).split(".")[0];
  const Decimal = String(num).split(".")[1].substring(0, decimals);
  const tempNumB = `${Int}.${Decimal}`;

  // 需求:数据为0时,需要显示为0,而不是0.00...
  return tempNumB;
};

2.调用

javascript 复制代码
<template>
  <div>
    {{ total | numFilter }}
  </div>
</template>

<script>
import { cutOutNum } from "@/util/cutOutNum";
export default {
  data() {
    return {
      total: 2.3334,
    };
  },
  filters: {
    numFilter(value) {
      return cutOutNum(value, 3);
    },
  },
  methods: {

  },
};
</script>

<style>
</style>
相关推荐
anew___1 小时前
《从零手写操作系统 (20):ELF加载器——让OS读懂现代编译器》
java·服务器·前端
ss2731 小时前
AI全栈实战 | 2.3-01 组件库实战:Element Plus 怎么搭出专业界面,过度封装为什么成维护负担
前端·javascript·elementui·vue
对空六课1 小时前
动态按钮ID变化时的稳定埋点标识设计
前端·数据分析
福兮说1 小时前
URL 编码的七个坑:c++ 传到后端变空格、%25 套娃、截断 emoji 直接报错
开发语言·前端·javascript·node.js·url
吴声子夜歌1 小时前
Nginx应用与运维——Nginx Web服务应用实战(Python网站的搭建)
运维·前端·nginx
小的时候可菜了1 小时前
JS 异步的本质:从单线程到 thenable(一条进化链)
开发语言·前端·javascript
liangshanbo12151 小时前
Webpack vs Vite 底层原理高频追问的问题
前端·webpack·node.js
可乐鸡翅yeah_1 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线
web打印社区2 小时前
Windows 网页静默打印设置步骤:客户端、防火墙与联调清单
开发语言·前端·javascript·chrome·pdf·ecmascript
恋猫de小郭2 小时前
KMP 又改了编译流程, Separate Compilation 禁止了 `commonMain` 的依赖穿透
android·前端·flutter