一. 问题描述最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如:0.1+0.2 == 0.300000000000000040.1 + 0.7 == 0.79999999999999997*0.8 == 5.60000000000000055.6/7 == 0.7999999999999999二.解决方案 JS运算后都会有很小的误差. 不像.Net或者Java那样准确. 主要是JS重点不在运算上面,可是有时候项目一定要用到.想了一下大概有两种解决方案A 方案一:运算结果保留2-3位小数位数. 前端界面一...
Js代码 代码如下: alert(1/3);//弹出: 0.3333333333333333 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999 alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999 alert(0.012345 * 0.000001);//弹出: 1.2344999999999999e-8 alert(0.000001 / 0.0001);//弹出: 0.009999999999999998 alert(1/3);//弹出: 0.3333333333333333 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999 a...
正则表达式方法 代码如下: function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/ if (!re.test(input.rate.value)) { alert("请输入数字(例:0.02)"); input.rate.focus(); return false; } } 下面为普通函数写法 代码如下: function BASEisNotNum(theNum) { //判断是否为数字 if (BASEtrim(theNum)=="") return true; for(var i=0;i<theNum.length;i++){ oneNum=...
1.下面列出了一些判读数值类型的正则表达式 代码如下: /^\d+$/ //非负整数(正整数 + 0) /^[0-9]*[1-9][0-9]*$/ //正整数 /^((-\d+)|(0+))$/ //非正整数(负整数 + 0) /^-[0-9]*[1-9][0-9]*$/ //负整数 /^-?\d+$/ //整数 /^\d+(\.\d+)?$/ //非负浮点数(正浮点数 + 0) /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/ //正浮点数 /^((-\d+(\.\d+)?)|(0+(\.0+)?)...
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。 我Google了一下,发现原来这是JavaScript浮点运算的一个bug。 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数或直接扩大倍数运算。 下面就把...
背景:项目中需要做个对两位小数点的正负浮点数的处理, 要求:非数字或者.字符自动清除,并对.12自动修补.前的0 原理:在输入框中加入两个事件,keyup与blur,keyup处理字符串中非要求的字符,blur中对最终字符串处理成理想的格式111.11 实现:通过七个正则处理掉主功能 val代表输入的字符串 /^\d*\.?\d{0,2}$/ 验证val是否是ddd.dd的格式,是则不处理,否才处理 /[^.0-9]+/ 处理掉val中所有的非数字与.的字符 /(?:\d*\.\d{0,2}|\...
最近一个嵌入式项目中需要WEB功能,因此想到利用HTML+JavaScript实现一些参数配置功能,参数由JavaScript生成十六进制数据,通过POST提交给单片机,然后再直接使用,以充分利用浏览器的计算能力。 由于JavaScript对浮点数的支持很弱,直接使用浮点数转十六进制功能,双不能实现平常在C语言中实现的4字节的存储表示法,通过搜索,并没有找到相关功能代码,在Node.js的Buffer类可以实现此功能,但又没办法使用(单片机存储空间有限)...
代码如下:var changeTwoDecimal_f= function (floatvar){ var f_x = parseFloat(floatvar); if (isNaN(f_x)){ return 0.00; } var f_x = Math.round(f_x*100)/100; var s_x = f_x.toString(); var pos_decimal = s_x.indexOf(.); if (pos_decimal < 0){ pos_decimal = s_x.length; s_x += .; } while (s_x.length <= pos_decimal + 2){ s_x += ...
代码如下://说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)) return...
Javascript在进行浮点数的乘积运算,会出现多位小数的情况。 这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它变成语言中也有类似的问题。 原因解释参考自百度知道: 例如:求1038.1-1000 1038.1=10000001110.0001100110011001100110011001100110011001100..... 1000 =1111101000 1038.1转化为二进制是个无限循环小数,1100是循环节,只能取近似值...
Summary 暂时我就想到3个方法而已。如果读者想到其他好用方法,也可以交流一下 parseInt 位运算符 Math.floor Math.ceil Description 一、parseInt 1. 实例parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")//13 parseInt("070")//ES3为56(八进制) ES5为70 parseInt(070)//ES3和ES5都为56 parseInt(22.5)//222. 转换规则: (1). 根据实例(1)得出parseInt会解析一直到非数字时停止 (2). ...
JS部分代码如下:function CheckInputIntFloat(oInput) { if('' != oInput.value.replace(/\d{1,}\.{0,1}\d{0,}/,'')) { oInput.value = oInput.value.match(/\d{1,}\.{0,1}\d{0,}/) == null '' :oInput.value.match(/\d{1,}\.{0,1}\d{0,}/); } }HTML部分代码(示例):
大多数编程语言都有几种数值型数据类型,但是JavaScript却只有一种。你可以使用typeof 运算符查看数字的类型。不管是整数还是浮点数,JavaScript都将它们简单地归类为数字。typeof 17; //number typeof 98.6; //number typeof -21.3; //number事实上,JavaScript中所有的数字都是双精度浮点数。这是由IEEE754标准制定的64位编码数字——即“doubles”。如果这一事实使你疑惑JavaScript是如何表示整数的,请记住,双精度浮点数能完美...
前言 最近在做项目的时候,涉及到产品价格的计算,经常会出现JS浮点数精度问题,这个问题,对于财务管理系统的开发者来说,是个非常严重的问题(涉及到钱相关的问题都是严重的问题),这里把相关的原因和问题的解决方案整理一下,也希望给各位提供一些参考。 一. 常见例子 // 加法0.1 + 0.2 = 0.300000000000000040.1 + 0.7 = 0.79999999999999990.2 + 0.4 = 0.6000000000000001// 减法0.3 - 0.2 = 0.099999999999999981.5 - 1.2...
问题描述在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此。 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00 。在一些特殊的数值表示中,例如金额,这样看上去有点变扭,但是至少值是正确了。然而要命的是,当浮点数做数学运算的时候,你经常会发现一些问题,举几个例子: // 加法 ===================== // 0.1 + 0.2 = 0.30000000000000004 // 0.7 + 0.1 = 0...