`
p_3er
  • 浏览: 55767 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JavaScript浮点运算的问题

 
阅读更多
问题这样的:
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)
我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。

比如:7*0.8 JavaScript算出来就是:5.6000000000000005


解决:

根据网上的方法写了一个函数:

/**
 * 四则运算方法
 * 
 * @param {}
 *            numA 第一个数字
 * @param {}
 *            numB 第二个数字
 * @param {}
 *            sign 运算符(+ - * /)
 */
function calculate(numA,numB,sign) { 
    var m=0,numALen=0,numBLen=0; 
    try{numALen=numA.toString().split(".")[1].length}catch(e){} 
    try{numBLen=numB.toString().split(".")[1].length}catch(e){} 
	
	if(sign === '+'){
		m=Math.pow(10,Math.max(numALen,numBLen));
		if(m == 0){
			m = 1;
		}
		return (numA*m+numB*m)/m; 
	}else if(sign === '-'){
		m=Math.pow(10,Math.max(numALen,numBLen));
		if(m == 0){
			m = 1;
		}		
		return (numA*m-numB*m)/m 
	}else if(sign === '*'){	
		m = Math.pow(10,numALen + numBLen) ;
		if(m == 0){
			m = 1;
		}
		return Number(numA.toString().replace(".",""))*Number(numB.toString().replace(".",""))/m
	}else if(sign === '/'){
		m = Math.pow(10,numALen - numBLen) ;
		if(m == 0){
			m = 1;
		}
        return (Number(numA.toString().replace(".",""))/Number(numB.toString().replace(".","")) )*m; 
	}
	
	return 0;
	
}


分享到:
评论

相关推荐

    JavaScript 浮点 运算 函数

    此函数是我自己写的,虽然在网上可以搜到很多,不过我找到的都是在算法中存在基本的浮点数的运算,导致结果仍然是错误的。由于刚刚学写JS,所以可能考虑不够周全,望大家批评指正。 代码中加了四舍五入函数,是网上...

    使用Vue.js及Element编写的精度浮点运算计算器源码(打开运行)

    由于javascript的浮点运算是不精确的(对于大多数编程语言都是这样),此程序使用整数来代替浮点数进行运算,最后再转化为浮点数,可以实现对设置范围内(运算范围在程序中为自定义变量range)的浮点运算实现精度...

    Javascript 浮点运算的问题分析与解决方法

    JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的,尤其是当它们以二进制形式存储时。例如,十进制的小数0.1、0.2或0.3在二进制下...

    Javascript 浮点运算精度问题分析与解决

    ### Javascript 浮点运算精度问题分析与解决 #### 知识点一:浮点数精度问题的普遍性 首先需要明确的是,浮点运算精度问题并不仅仅存在于JavaScript中,这实际上是计算机科学中的一个普遍问题。原因在于计算机使用...

    js中Number数字数值运算后值不对的解决方法.docx

    JavaScript 中 Number 数字数值运算后值不对的解决方法 ...解决 JavaScript 中 Number 数字数值运算后值不对的问题需要重新编写浮点运算函数或使用 Number 的 prototype 方法来实现精确的浮点运算。

    calculatorjs:Accurately arithmetic library. 解决Javascript浮点运算精度问题

    计算器 > 2.1 + 2.24.300000000000001> calc ( ' 2.1 + 2.2 ' )4.3用法使用NPM:npm install --save calculatorjs 在Node.js或浏览器中: const calc = require ( 'calculatorjs' )console . log ( calc ( ' 0.1*...

    js中浮点类型数据的计算

     我Google了一下,发现原来这是JavaScript浮点运算的一个bug。  比如:7*0.8 JavaScript算出来就是:5.6000000000000005  网上找到了一些解决办法,就是重新写了一些浮点运算的函数。  下面就把这些方法摘录...

    javascript 浮点数运算

    Javascript 和大部分语言一样在浮点数运算时,经常出现精度丢失的问题,由于现在的大量Web项目经常涉及到货币计算或数学高级计算,此插件提供简单浮点运算,浮点存储格式符合IEEE754计算机

    js中浮点型运算BUG的解决方法说明.docx

    总的来说,JavaScript中的浮点型运算问题主要源于浮点数的二进制表示,但通过编写自定义函数或使用专门的库,我们可以有效地控制和解决这些问题,确保计算的准确性。在开发过程中,理解这些底层机制并采取适当的措施...

    JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法

    为了解决由IEEE标准二进制浮点运算引起的精度问题,开发人员可以使用一些技巧和方法来避免错误。在这篇文档中,提供了一个名为`function round(v, e)`的函数,该函数可以用于对数字进行四舍五入,并保留指定的小数...

    浅析js中的浮点型运算问题

    总之,JavaScript中的浮点型运算问题主要源于浮点数的二进制表示和计算精度限制,开发者可以通过自定义函数或者使用第三方库来尽可能地提高计算的精确度。理解这个问题对于编写高质量的JavaScript代码至关重要,尤其...

    C++中调用JavaScript的开发库

    `fdlibm.lib` 通常是一个数学库,可能包含了JavaScript引擎需要的一些浮点运算函数。最后一个 `js` 文件可能是库的头文件,包含了必要的API定义,供C++代码进行引用和调用。 使用这样的库,C++开发者可以: 1. **...

    js中浮点型运算BUG的解决方法说明

    总结来说,这些函数通过以下步骤解决了JavaScript中浮点运算的精度问题: 1. 分析输入数值的小数部分位数。 2. 如果需要,调整数值的位数,使其具有相同的精度。 3. 使用整数运算代替浮点数运算,以避免浮点数误差...

    js中Number数字数值运算后值不对的解决方法

    我Google了一下,发现原来这是JavaScript浮点运算的一个bug。 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 解决方法:网上找到了一些解决办法,就是重新写了一些浮点运算的函数。 下面就把这些方法摘录...

    详解JavaScript 浮点数运算的精度问题

    然而要命的是,当浮点数做数学运算的时候,你经常会发现一些问题,举几个例子: // 加法 ===================== // 0.1 + 0.2 = 0.30000000000000004 // 0.7 + 0.1 = 0.7999999999999999 // 0.2 + 0.4 = 0.600

    JavaScript 浮点数运算 精度问题

    JavaScript中的浮点数运算精度问题是一个常见的编程挑战,主要源于计算机内部表示浮点数的方式。在JavaScript中,浮点数是使用IEEE 754标准进行存储和计算的,这导致了某些运算结果可能并不像预期那样精确。例如,1/...

    万能数学计算器javascript

    JavaScript支持整型、浮点型等数值类型,以及+、-、*、/等基本的算术运算符,这些是构建计算器的核心。开发者通常会创建一个HTML界面,包含数字按钮、操作符按钮和显示区域,然后利用JavaScript来处理用户的输入和...

Global site tag (gtag.js) - Google Analytics