vue 数字转千分位js

处理千分位并且保留两位小数1:function函数

复制代码
{{ scope.row.dqyszje == 0 ? '' : keepTwoDecimalFull(scope.row.dqyszje) }}
{{ keepTwoDecimalFull(form.projectBudget).toFixed(2) }}

    keepTwoDecimalFull(value) {
      if (!value) return 0;
      // 获取整数部分
      const intPart = Math.trunc(value);
      // 整数部分处理,增加,
      const intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
      // 预定义小数部分
      let floatPart = '';
      // 将数值截取为小数部分和整数部分
      const valueArray = value.toString().split('.');
      if (valueArray.length === 2) {
        // 有小数部分
        floatPart = valueArray[1].toString(); // 取得小数部分
        return intPartFormat + '.' + floatPart;
      }
      return intPartFormat + floatPart;
    },

处理千分位并且保留两位小数2:filters过滤器写法

复制代码
<template slot-scope="scope">
      <div style="text-align: right">{{ scope.row.contractAmount | numFilter }}</div>
</template>

  filters: {
    numFilter(value) {
      if (value === 0 || value === 0.0 || value === 0.0 || value === '0.0' || value === '0.00') {
        return '0.00';
      }
      if (value == null || value == 'null') {
        return;
      }
      let sym = '';
      if (value && value.toString()[0] == '-') {
        sym = '-';
      }
      // 获取整数部分
      let intPart = Math.trunc(value);
      intPart = Math.abs(intPart);
      // 整数部分处理,增加,
      const intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
      // 预定义小数部分
      let floatPart = '';
      // 将数值截取为小数部分和整数部分
      const valueArray = value.toString().split('.');
      if (valueArray.length === 2) {
        // 有小数部分
        floatPart = valueArray[1].toString(); // 取得小数部分
      }
      if (floatPart === '') {
        floatPart = '00';
      }
      return sym + intPartFormat + '.' + floatPart;
    },
  },

简便写法处理数字千分位转化

复制代码
        // 数字转千分符
        function toThousandSeparator(value) {
            return value.replace(/(\d)(?=(\d{3})+(\.|$))/g, "$1,");
        }
        // 千分符转数字
        function toNumber(value) {
            const cleanedValue = value.replace(/,/g, '');
            return parseFloat(cleanedValue);
        }

创建公共的js方法

复制代码
{{ scope.row.totalAmountPaid | filterNumZero }}         
  filters: {
    filterNumZero(value) {
      return numFilterZero(value, false);
    },
  },
  

import { numFilterZero } from '@/views/projectContractManagementView/components/common.js';

common.js:
/**
 * 千分位
 * @param {String} value 数字
 * @param {Boolean} isShowZero  value为0时是否显示
 * @param {Number} floatLen  小数位的长度
*/
const numFilter = (value, isShowZero = true, floatLen = 2) => {
    if (value == 'null' || value == null || String(value) == "") {
        value = 0
    }
    value = parseFloat(value).toFixed(floatLen)
    if (value == 0 || value == '0' || value == '0.0' || value == '0.00' || value == 'null' || value == null) {
        if (isShowZero) {
            return value
        } else {
            return ''
        }
    }
    let sym = "";
    if (value && value.toString()[0] == '-') {
        sym = '-'
    }
    // 获取整数部分
    let intPart = Math.trunc(value)
    intPart = Math.abs(intPart)
    // 整数部分处理,增加,
    const intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
    // 预定义小数部分
    let floatPart = ''
    // 将数值截取为小数部分和整数部分
    const valueArray = value.toString().split('.')
    if (valueArray.length === 2) { // 有小数部分
        floatPart = valueArray[1].toString() // 取得小数部分
        return (sym + intPartFormat + '.' + floatPart)
    }
    return (sym + intPartFormat)
}

/**
 * 金额处理 最大值为999999999.99,最多允许两位小数;
 * @param {*} num 
 */
const moneyVerifyFirst = (num) => {
    console.log(num, "villageManagementvillageManagementvillageManagement");
    if (Number(num) > Number(999999999.99)) {
        return 999999999.99;
    } else {
        return num
            .replace(/^0[0-9]+/, (num) => num[1])
            .replace(/^(\.)+/, "")
            .replace(/[^\d.]/g, "")
            .replace(/^(-)*(\d\d\d\d\d\d\d\d\d\d)*$/, "$1")
            .replace(/\.+/, ".")
            .replace(".", "$#$")
            .replace(/\./g, "")
            .replace("$#$", ".")
            .replace(/^(-)*(\d+)\.(\d\d).*$/, "$1$2.$3");
    }
}
const amend = (firstNumber, secondNumber, symbol) => {
    symbol = symbol || '+';
    let firstDecimal =
        firstNumber.toString().indexOf('.') != -1 ? firstNumber.toString().split('.')[1].length : 0;
    let secondDecimal =
        secondNumber.toString().indexOf('.') != -1
            ? secondNumber.toString().split('.')[1].length
            : 0;
    let maxDecimal = secondDecimal > firstDecimal ? secondDecimal : firstDecimal;
    let result = 0;
    let firstInt =
        parseInt(firstNumber.toString().replace('.', '')) * Math.pow(10, maxDecimal - firstDecimal);
    let secondInt =
        parseInt(secondNumber.toString().replace('.', '')) *
        Math.pow(10, maxDecimal - secondDecimal);
    switch (symbol) {
        case '+':
            result = firstInt + secondInt;
            return result / Math.pow(10, maxDecimal);
        case '-':
            result = firstInt - secondInt;
            return result / Math.pow(10, maxDecimal);
        case '*':
            result = firstInt * secondInt;
            return result / Math.pow(10, maxDecimal * 2);
        case '/':
            return (result = firstInt / secondInt);
        default:
            result = firstInt + secondInt;
            return result / Math.pow(10, maxDecimal);
    }
}
export { numFilter, moneyVerifyFirst, amend }
相关推荐
wordbaby2 分钟前
为什么刷新页面就 404?聊聊 SPA 路由与 Nginx 的那点事
前端
daols888 分钟前
vxe-table 渲染器教程一:实现金额输入控件
javascript·vue.js·vxe-table
不好听61321 分钟前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹22 分钟前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听61323 分钟前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue24 分钟前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue24 分钟前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
小林ixn1 小时前
从 onclick 到 React 合成事件,再到完整应用逻辑:一次前端架构的深度剖析
前端·react.js·前端框架
Csvn2 小时前
🧩「找不到模块」排查全记录——Monorepo 下 TypeScript 路径别名的 5 种「不通」与根治方案
前端
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程