问题这样的: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;
}
分享到:
相关推荐
此函数是我自己写的,虽然在网上可以搜到很多,不过我找到的都是在算法中存在基本的浮点数的运算,导致结果仍然是错误的。由于刚刚学写JS,所以可能考虑不够周全,望大家批评指正。 代码中加了四舍五入函数,是网上...
由于javascript的浮点运算是不精确的(对于大多数编程语言都是这样),此程序使用整数来代替浮点数进行运算,最后再转化为浮点数,可以实现对设置范围内(运算范围在程序中为自定义变量range)的浮点运算实现精度...
JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的,尤其是当它们以二进制形式存储时。例如,十进制的小数0.1、0.2或0.3在二进制下...
### Javascript 浮点运算精度问题分析与解决 #### 知识点一:浮点数精度问题的普遍性 首先需要明确的是,浮点运算精度问题并不仅仅存在于JavaScript中,这实际上是计算机科学中的一个普遍问题。原因在于计算机使用...
JavaScript 中 Number 数字数值运算后值不对的解决方法 ...解决 JavaScript 中 Number 数字数值运算后值不对的问题需要重新编写浮点运算函数或使用 Number 的 prototype 方法来实现精确的浮点运算。
计算器 > 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*...
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数。 下面就把这些方法摘录...
Javascript 和大部分语言一样在浮点数运算时,经常出现精度丢失的问题,由于现在的大量Web项目经常涉及到货币计算或数学高级计算,此插件提供简单浮点运算,浮点存储格式符合IEEE754计算机
总的来说,JavaScript中的浮点型运算问题主要源于浮点数的二进制表示,但通过编写自定义函数或使用专门的库,我们可以有效地控制和解决这些问题,确保计算的准确性。在开发过程中,理解这些底层机制并采取适当的措施...
为了解决由IEEE标准二进制浮点运算引起的精度问题,开发人员可以使用一些技巧和方法来避免错误。在这篇文档中,提供了一个名为`function round(v, e)`的函数,该函数可以用于对数字进行四舍五入,并保留指定的小数...
总之,JavaScript中的浮点型运算问题主要源于浮点数的二进制表示和计算精度限制,开发者可以通过自定义函数或者使用第三方库来尽可能地提高计算的精确度。理解这个问题对于编写高质量的JavaScript代码至关重要,尤其...
`fdlibm.lib` 通常是一个数学库,可能包含了JavaScript引擎需要的一些浮点运算函数。最后一个 `js` 文件可能是库的头文件,包含了必要的API定义,供C++代码进行引用和调用。 使用这样的库,C++开发者可以: 1. **...
总结来说,这些函数通过以下步骤解决了JavaScript中浮点运算的精度问题: 1. 分析输入数值的小数部分位数。 2. 如果需要,调整数值的位数,使其具有相同的精度。 3. 使用整数运算代替浮点数运算,以避免浮点数误差...
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 解决方法:网上找到了一些解决办法,就是重新写了一些浮点运算的函数。 下面就把这些方法摘录...
然而要命的是,当浮点数做数学运算的时候,你经常会发现一些问题,举几个例子: // 加法 ===================== // 0.1 + 0.2 = 0.30000000000000004 // 0.7 + 0.1 = 0.7999999999999999 // 0.2 + 0.4 = 0.600
JavaScript中的浮点数运算精度问题是一个常见的编程挑战,主要源于计算机内部表示浮点数的方式。在JavaScript中,浮点数是使用IEEE 754标准进行存储和计算的,这导致了某些运算结果可能并不像预期那样精确。例如,1/...
JavaScript支持整型、浮点型等数值类型,以及+、-、*、/等基本的算术运算符,这些是构建计算器的核心。开发者通常会创建一个HTML界面,包含数字按钮、操作符按钮和显示区域,然后利用JavaScript来处理用户的输入和...