前端计算精度丢失问题

KEIL-MDK代码美化神器:AStyle配置全攻略(附常用参数详解) 本文详细介绍了如何在KEIL-MDK中配置和使用AStyle代码格式化工具,包括基础参数设置、高级格式控制、团队协作方案以及KEIL深度集成技巧。通过合理的AStyle配置,开发者可以显著提升代码风格一致性,优化团队协作效率,特别适合嵌入式开发项目。 阅读详情
// 精度丢失异常数据汇总
10.3950 * 3935.00 = 期望40904.33, 异常结果40904.32
7.3950 * 3835.00 = 期望28359.83, 异常结果28359.82
11.777 * 4215 = 期望49640.06, 异常结果49640.05
12.445 * 4005 = 期望49842.23,异常结果49842.22
3721*17.0480 = 期望63435.61,异常结果63435.60
3621*5.0060 = 期望18126.73,异常结果18126.72

vue项目中直接装插件

npm install bignumber.js
import { BigNumber } from 'bignumber.js';
// +
export function add(a, b) {
  a = BigNumber(a);
  b = BigNumber(b);
  return a.plus(b).toNumber();   //结果需要用toNumber转为普通数字
}
// -
export function minus(a, b) {
  a = BigNumber(a);
  b = BigNumber(b);
  return a.minus(b).toNumber();
}
// *
export function mut(a, b) {
  a = BigNumber(a);
  b = BigNumber(b);
  return a.multipliedBy(b).toNumber();
}
// /
export function dev(a, b) {
  a = BigNumber(a);
  b = BigNumber(b);
  return a.dividedBy(b).toNumber();
}

界面中使用:

import {
	add,
	minus,
	mut,
	dev
} from '@/utils/common.js' //公共方法

row.amountStr = (this.mut(Number(row.salePriceStr), Number(row.weightStr))).toFixed(2)

toFixed也有精度丢失问题,直接main.js中改写toFixed方法

Number.prototype.toFixed = function(d) {
  var s = this + ''
  if (!d) d = 0
  if (s.indexOf('.') === -1) s += '.'
  s += new Array(d + 1).join('0')
  if (new RegExp('^(-|\\+)?(\\d+(\\.\\d{0,' + (d + 1) + '})?)\\d*$').test(s)) {
    let s = '0' + RegExp.$2; var pm = RegExp.$1; var a = RegExp.$3.length; var b = true
    if (a === d + 2) {
      a = s.match(/\d/g)
      if (parseInt(a[a.length - 1]) > 4) {
        for (var i = a.length - 2; i >= 0; i--) {
          a[i] = parseInt(a[i]) + 1
          if (a[i] === 10) {
            a[i] = 0
            b = i !== 1
          } else break
        }
      }
      s = a.join('').replace(new RegExp('(\\d+)(\\d{' + d + '})\\d$'), '$1.$2')
    }
    if (b) s = s.substr(1)
    return (pm + s).replace(/\.$/, '')
  }
  return this + ''
}

如果vue3中遇到精度丢失问题,可以创建一个fixed.js文件

// // js
if (!Number.prototype._toFixed) {
	// eslint-disable-next-line no-extend-native
	Number.prototype._toFixed = Number.prototype.toFixed
}
// eslint-disable-next-line no-extend-native
Number.prototype.toFixed = function (d) {
	let s = this + ''
	if (!d) {
		d = 0
	}
	if (s.indexOf('.') === -1) {
		s += '.'
	}
	s += new Array(d + 1).join('0')
	if (new RegExp('^(-|\\+)?(\\d+(\\.\\d{0,' + (d + 1) + '})?)\\d*$').test(s)) {
		let s = '0' + RegExp.$2
		let pm = RegExp.$1
		let a = RegExp.$3.length
		let b = true
		if (a === d + 2) {
			a = s.match(/\d/g)
			if (parseInt(a[a.length - 1]) > 4) {
				for (let i = a.length - 2; i >= 0; i--) {
					a[i] = parseInt(a[i]) + 1
					if (a[i] === 10) {
						a[i] = 0
						b = i !== 1
					} else {
						break
					}
				}
			}
			s = a.join('').replace(new RegExp('(\\d+)(\\d{' + d + '})\\d$'), '$1.$2')
		}
		if (b) {
			s = s.substr(1)
		}
		return (pm + s).replace(/\.$/, '')
	}
	return this + ''
}

然后再main.ts文件中引入即可

import '@/utils/fixed'

方式二: 封装js方法

// 乘法
function highPrecisionMul(data1, data2) {
  let m = 0;
  const s1 = data1.toString();
  const s2 = data2.toString();
  // 获取所有参数小数位长度之和
  try {
    m += s1.split(".")[1].length;
  } catch (e) { e => e }
  try {
    m += s2.split(".")[1].length;
  } catch (e) { e => e }
  // 替换掉小数点转为数字相乘再除以10的次幂值
  return (
    (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
    Math.pow(10, m)
  );
};

// 加法

function highPrecisionAdd(data1, data2) {
  let r1, r2;
  // 获取每个参数的小数的位数
  try {
    r1 = data1.toString().split(".")[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = data2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  // 计算底数为10以最大小数位数为次幂的值
  const m = Math.pow(10, Math.max(r1, r2));
  // 把所有参数转为整数后相加再除以次幂的值
  return (data1 * m + data2 * m) / m;
};


// toFixed精度问题  重写

function toSuperFixed(n, d) {
  var s = n + "";
  if (!d) d = 0;
  if (s.indexOf(".") === -1) s += ".";
  s += new Array(d + 1).join("0");
  if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
    let s = "0" + RegExp.$2; var pm = RegExp.$1; var a = RegExp.$3.length; var b = true;
    if (a === d + 2) {
      a = s.match(/\d/g);
      if (parseInt(a[a.length - 1]) > 4) {
        for (var i = a.length - 2; i >= 0; i--) {
          a[i] = parseInt(a[i]) + 1;
          if (a[i] === 10) {
            a[i] = 0;
            b = i !== 1;
          } else break;
        }
      }
      s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2");
    }
    if (b) s = s.substr(1);
    return (pm + s).replace(/\.$/, "");
  }
  return this + "";
}

使用:

this.toSuperFixed(this.highPrecisionMul(Number(row.priceStr), Number(row.weightStr)), 2)
30、电力生产系统中的效率测量 本文探讨了如何使用数据包络分析(DEA)模型来评估电力生产系统的效率。文章详细介绍了电力生产系统的三个主要环节——发电、输电和配电,并通过多种DEA模型,如输入导向模型、输出导向模型以及基于松弛的SBM模型,展示了效率测量的方法和技术。同时,结合实际案例分析,说明了DEA模型在识别效率低下环节及提出改进建议方面的应用价值。 阅读详情

相关推荐

全志T113 Tina5.0开发:(一)添加自己的板级支持包

3.验证 先执行 source build/envsetup.sh ,然后lunch,下图可见9就是我们自己添加的板子。2. 1)修改 t113-evb1.mk重命名为t113-ws_devboard。我使用的spinand,只需要修改openwrt里面的文件即可。以下内容仅作为自己笔记,如果错误欢迎留言指出。修改t113-ws_devboard。

u014428915的博客 1164

完美解决!处理精度丢失问题点

解决方式二:全局配置。

m0_63300795的博客 6753

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

冒泡排序、选择排序、插入排序、快速排序、希尔排序

HK的博客 18万+

为什么前端数值精度会丢失?(BigInt解决办法)

数值计算、保留指定小数位、接口返回数值过大等等,这些操作都有可能导致原本正常的数值在JavaScript中确表现得异常(即精度丢失)。使用整数进行计算(先放大再缩小)。在处理需要高精度计算的场景中,可以使用一些专门的库或工具。例如,JavaScript中的Decimal.js、Big.js或BigNumber.js等库提供了高精度的数学计算功能,可以避免精度丢失的问题。超过最值时,接口以字符串的形式返回对应的值。

金乌的博客 6321

Bertopic库安装(二)

Bertopic库安装

weixin_43392789的博客 4894

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8899

前端数字精度丢失原因和解决方案

在项目开发中,一般比较重要的数值计算是交给后端处理,再返还给前端,(例如:订单金额、科学数据)。但在一些项目,前端不得不自己处理数值计算,这是就有可能遇到精度丢失例如:后端返回数字型id , 9999999999994322924 前端读取到的值 9999999999994323000。

weixin_44862629的博客 3720

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 732

【JS】关于精度丢失,产生的原因以及解决方案

在前端开发中,精度丢失是一个常见的问题,特别是在涉及到浮点数计算时。

Eliaukoyx 1万+

VisionTransformer改进(11):结合CoordAtt注意力机制

​​CoordAtt模块​​:一个轻量级的坐标注意力机制​​ViT模型​​:基于标准Vision Transformer架构,但集成了CoordAtt模块模型最终通过CNNModel函数封装,虽然名称是CNN,但实际上是一个Transformer模型。引入了轻量级的CoordAtt注意力机制,增强了模型对空间位置信息的捕捉能力保持了ViT的主要优势,同时通过注意力机制提升了特征表示能力设计简洁高效,适合作为基础模型进行进一步研究和应用。

2401_82355416的博客 701

前端精度丢失处理

前端操作数据时,如果数据超出一定范围会出现精度丢失的问题,这是因为,在传输过程中,数据类型被转换成Number,Number的精度范围在2^53之间

月下lk山人的博客 2434

柑橘病虫害识别方案总结

1. 方案一 1.1 赛题背景 1.2 数据分析 1.3 模型设计 1.3.1 模型具体方案 1.3.2 模型设计 1.4 实验结果 1.5 总结与展望 2. 方案二 2.1 赛题介绍 2.2 数据分析 2.3 算法方案解析 2.3.1 检测模型 2.3.2 提升策略 2.4 优化思路 3. 方案三 3.1 数据分析 3.1.1 数据说明 3.2 技术展示 3.2.1 数据输入端 3.2.2 模型结构端 3.2.3 上下文信息 3.2.4 训练优化端 3.2.5 创新性分析 3.3 算法及系统思考.....

herosunly的博客 2万+

如何完美解决前端数字计算精度丢失与数字格式化问题?

大家好,我是木瓜太香,做前端开发经常会遇到数字计算精度丢失的问题,和数字格式化的麻烦问题,好不容易找到了可以解决这些问题的库结果用起来不够方便,例如 bignumber.js decimal.js 等编写体验不好,这篇文章来帮助你完美解决这些问题。

GD6570的专栏 568

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

element ui前端小数计算精度丢失的问题如何解决?

数字的计算 vue 总是出现精度丢失的困惑,解决这个问题其实很简单,有条件的同学可以自己封装函数,没有条件的同学懒人就用懒方法。小编虽懒,使用高人封装的decimal.js方法,爽的一逼,节约时间用于陪女朋友去喝咖啡何乐而不美

xnqys的博客 1217

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

巧妙的解决web前端数字计算精度丢失的问题

欢迎来到QQ技术交流群:126095418 所有做过web前端开发的朋友们都遇到过这样的问题,在写javascript代码的时候 var a = 0.1, b = 0.2, c = a + b; console.log(c); //0.30000000000000004 发现这段代码执行的结果并不是我们预期的 0.3 ,这就是计算精度丢失导致的这个问题,那么这个问题要...

编程世界 4090

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

前端JS解决两数计算精度丢失问题

<script type="text/javascript"> // 两个浮点数求和 function accAdd(num1,num2){ var r1,r2,m; try{ r1 = num1.toString().split('.')[1].length; }catch(e){ r1 = 0; } try{ r2=num2.toStri...

qq_41448399的博客 549

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

官网: decimal.js提供十进制类型的任意精度数值Decimal.js 是一个小型库,用于解决浮点数计算的不精确问题安装 decimal.js在代码中引入 ,两种方式二选一require 是CommonJS模块系统的语法import 是ES6模块系统的语法。

m0_71071209的博客 1871

web前端精度丢失前端精度计算彻底解决

大家好,我是木瓜太香,做前端开发经常会遇到数字计算精度丢失的问题,和数字格式化的麻烦问题,好不容易找到了可以解决这些问题的库结果用起来不够方便,例如 bignumber.js decimal.js 等编写体验不好,这篇文章来帮助你完美解决这些问题。

GD6570的专栏 715

使用big.js处理计算精度问题

使用big.js处理计算进度问题 import Big from "big.js"; export const pint = { // 除法 division(a = 0, b = 0) { return new Big(a).div(b).toNumber(); }, // 加法 add(a = 0, b = 0) { return new Big(a).plus(b).toNumber(); }, // 乘法 multip(a = 0, b = 0).

weixin_47346395的博客 1464

前端计算精度保卫战:Vue3中big.js的加减乘除实战指南

在电商、金融等需要高精度计算的场景中,JavaScript原生数值运算的精度丢失问题(如0.1+0.2≠0.3)已成为开发者的"隐形地雷"。本文将系统解析如何在Vue3项目中引入第三方库。通过本文的完整方案,开发者可系统解决Vue3项目中的前端计算精度问题。如需处理更复杂的金融场景(如货币转换),可进一步探索big.js的。,并通过加减乘除四大核心场景的实战案例,构建一套完整的精度解决方案。

Html_vueJs的博客 1467

JS计算中精度的丢失

js运算精度丢失问题

cxz 1085

js计算结果不精确问题解决--math.js的使用

最近在做订单相关的一个功能,涉及到金额的计算,有人建议,将计算全部抛给后端来做吧,前端就不需要再维护一套算法了,话说的在理,但是呢,想想用户体验,单价*数量=金额,当用户改变一个数量时,用户都口算出来金额了,然而页面还在请求的loading中,这也太....... 于是乎,我决定前端也维护一套算法,给用户最快的响应.页面大致如下: 正常来说,这完全不是个事,很快就全部按要求实现 了,...

diaoman4889的博客 832

el-table合并总结精度丢失的计算代码

el-table合并总结精度丢失的计算代码

南漂一枚 513

解决前端精度丢失问题

BigInt可以表示任意大的整数;

wu1862953的博客 1288
上一篇: elementUI表格勾选框判断选择相同的内容才能进行后续逻辑处理;否则拦截提示
下一篇: nvm管理node版本问题处理集合
别忘了微笑_cuicui
博客等级 码龄8年 227粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值