首页 > 其他分享 >vue系列---【vue 使用decimal.js 解决小数相加合计精确度丢失问题】

vue系列---【vue 使用decimal.js 解决小数相加合计精确度丢失问题】

时间:2023-06-01 21:56:16浏览次数:64  
标签:count sumArr vue column decimal js item let property

  1. 使用 npm 安装 decimal.js 库
npm install decimal.js

2.在 Vue 组件中引入该库

import Decimal from 'decimal.js';

3.使用示例

footerMethod({columns, data}){
   let sumArr = [];
   columns.map((column, columnIndex)=>{
        if(columnIndex === 0){
           sumArr[columnIndex] = '合计';
        }
        // 计算数字合计
        if(
            [
               'lAmount1',
               'lAmount2'
            ].includes(column.property)
         ){
            // 1.将数组内的所有小数值转为 Decimal 类型,并进行累加运算
            let count = new Decimal(0);
            data.forEach(item => {
              let num = item[column.property]
                  ?typeof item[column.property] !='number'
                   ?parseFloat(item[column.property].replace(/[^\d\.-]/g, ""))
                   :item[column.property]
                  :0;
              count = count.plus(parseFloat(num));
            });
              2.将得到的 Decimal 类型结果转换为普通的 JavaScript 数字类型
              let result = count.toNumber();
                sumArr[columnIndex] = toThousands(Math.floor(result*100)/100);
              }
               // 计算某类字符串出现的次数,比如组合类型
               if(column.property == 'fileName'){
                   let count = 0;
                   // let arr = []; 
                   data.forEach(item=>{
                     // 1、数组针对文件名去重后得到的count
                     // if(!arr.includes(item.fileName)){
                     //     count += 1;
                     //     arr.push(item.fileName);
                     // }
                     if(item.id) count += 1;
                   })
                   sumArr[columnIndex] = toThousands(count);
                }
            }) 
            return [sumArr]
         }

标签:count,sumArr,vue,column,decimal,js,item,let,property
From: https://www.cnblogs.com/chenhaiyun/p/17450313.html

相关文章

  • 在Vue中实现扫码枪读取条形码数据
    1.创建扫码枪输入组件首先,我们需要创建一个Vue组件来处理扫码枪的输入。在组件中,我们使用一个input元素来接收扫码枪的输入,并将输入的值绑定到组件的scanEntry属性上。<template><divclass="BarCodeScannerDiv"><inputclass="input"v-model="scanEntry":placehold......
  • vue2响应式原理
    一、初识响应式原理如果我们在Vue实例中声明过的数据发生了改变,那么所有用到这份数据的视图都会更新重新渲染,我们称这些数据就是响应式数据。响应式概括来说就是数据驱动视图的自动更新。<divid="app">{{obj.message}}</div>letdata={obj:{message:'Hel......
  • ant design vue 下的a-input 使用v-decorator(修改数据)回显
    a-input使用v-decorator回显不应该用v-model,可以使用this.form.setFieldsValue来动态改变表单值。定义form:<template><divclass="main"><a-formid="formLogin"class="user-layout-login"ref="formLogin"......
  • 初识Vue
    前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看 -javascript=ECMAScript(5,6,13)+Dom+Bom#2Ajax的出现->后台发送异步请求,Re......
  • antd的upload组件的各种上传、下载操作(vue)
    作为前端小白刚刚接触上传、下载文件的操作也让我很头疼,所以利用时间记录一下方便巩固,希望能够帮到大家。我将情况分为以下几种:一、点击按钮上传单个文件//html<a-upload:action="baseUrl+'/api/uploadSingleFile'":headers="headers"......
  • SpringBoot SSM vue 在线办公系统
    SpringBootSSMvue在线办公系统系统功能登录忘记密码首页统计分析用户管理员工管理公告管理考勤管理绩效管理薪酬管理流程管理留言管理文件管理开发环境和技术开发语言:Java使用框架:SpringBoot或SSM +Mybatis+MysqlSpringBoot是一个用于构建Java应用......
  • uniapp 组件中使用页面的生命周期(vue2)
    用于直接在组件中使用onLoad,onBackPress等因为之前在写App的时候有许多弹窗,希望可以在有弹窗的时候先关闭弹窗,没有弹窗在执行返回事件,因此需要在页面onBackPress里面写很多判断,因此找了一些方法,写了可以直接在组件中调用页面生命周期的方法!使用mixinthis.$children去循环查询......
  • 通过实例了解vue3.3更新的特征
    开场白5月份,vue团队发布了vue3.3.这次小版本的发布主要解决了--Vue与TypeScript一起使用时的许多长期存在的痛点.下面我们一起来学习一下vue3.3新特征准备新新特征的环境根据官方团队的描述,我们需要准备一下工作。vue升级到3.3时,建议同时更新以下依赖项:Volar/vue......
  • 【Vue】 vue项目的目录结构
    ├──build/#Webpack配置目录├──dist/#build生成的生产环境下的项目├──config/#Vue基本配置文件,可以设置监听端口,打包输出等├──node_modules/#依赖包,通常执行npmi会生成├──src/......
  • Java 对象转 Json
    <!--json依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.2</version></dependency>......