js浮点数计算精度问题---输入支付金额为19.9元时,提交却是19.89元

一、问题内容

在码牌支付过程中,输入支付金额为19.9元时,后端保存的却是19.89元

二、问题原因

由于js在进行一个浮点数与任何Number数据运算时,可能会产生精度不准确的问题

问题代码:

tradeFee = parseInt(Fee*100);  //Fee为金额

浏览器在执行19.9*100时得到的结果是1989.9999999999998,会存在0.0000000002的误差,再通过parseInt方法取整后就造成了结果为1989
在这里插入图片描述

三、解决方案

由于浮点型直接计算可能会出问题,所以可以将其先转为整型计算,乘法先去掉小数点,先转为整数乘法,然后再将结果缩小n倍

// 解决js数字小数点丢失精度的问题
function numMulti(num1, num2) {
	var baseNum = 0;
	try {
		baseNum += num1.toString().split(".")[1].length;
	} catch (e) {
	}
	try {
		baseNum += num2.toString().split(".")[1].length;
	} catch (e) {
	}
	return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
}
//调用
tradeFee = numMulti(Fee,100);

四、分析

个别数字精度丢失原因:因为计算机是采用二进制存取数据,有些浮点数二进制之后就成为无限不循环小数了,但是浮点数的小数部分最多支持 52 位,超过就自动舍入计算了,然后就会有精度损失问题(加减乘除都可能存在问题,最好是自己封装工具类或者引入封装好的公共方法)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Aspose.CAD是一个用于处理CAD文件的Java API。Aspose.CAD可以用来读取、转换和编辑不同格式的CAD文件,包括DWG、DXF、DWF和DGN等格式。Aspose.CAD在处理CAD文件时兼容性非常好,可以无缝转换CAD文件,同时保留原始文件的结构和属性信息。Aspose.CAD的API良好并易于使用,内置了许多方便的工具和功能,可以轻松地完成各种CAD处理任务。其中aspose-cad-19.9.jar是Aspose.CAD的一个版本,提供了许多新特性和改进,包含最新的图像处理算法和兼容性功能,可以大大改进CAD文件的处理效率和质量。无论是在个人使用还是在开发项目中应用,Aspose.CAD都是一个非常实用的Java API。 ### 回答2: Aspose.CAD是一个用于Java平台的CAD模型处理API,可以使您轻松地读取和处理AutoCAD DWG和DXF文件,并可以将它们转换为其他格式,例如PDF,JPEG,PNG和SVG等。aspose-cad-19.9.jar是Aspose.CAD 19.9版本的Java库文件,可用于Java开发人员在其项目中使用。该库提供了很多功能,包括转换CAD文件,浏览CAD对象属性,设置CAD实体的属性,处理CAD几何体,处理CAD层,处理CAD布局和部分布局等。使用Aspose.CAD可以大大简化您的CAD文件处理流程,提高开发效率和准确性。此外,Aspose.CAD具有跨平台性和高度可靠性,可以确保您的应用程序在各种操作系统和CAD文件类型上都能正常工作。总之,aspose-cad-19.9.jar是一个非常有用的库,可以让Java开发人员轻松处理CAD文件。 ### 回答3: aspose-cad-19.9.jar是一个Java开发工具包,用于处理计算机辅助设计(CAD)文件。它提供了许多功能,包括将CAD文件转换为不同的格式,将CAD文件保存为图像文件,以及从CAD文件中提取数据。使用aspose-cad-19.9.jar,开发人员可以轻松地在Java应用程序中集成CAD文件处理功能,并利用其强大的功能来创建各种应用程序,例如CAD查看器,CAD编辑器和CAD文件转换器。此外,aspose-cad-19.9.jar还提供了对DWG和DXF文件格式的完全支持,这些文件格式在CAD设计中非常常见。总之,aspose-cad-19.9.jar是一个非常强大和有用的工具,能够大大简化CAD文件处理任务,并提高开发人员的工作效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值