原文地址:http://eatpockyboy.blog.163.com/blog/static/116734640201231414154243/
最近做javascript算价格总和的时候遇到乘法也有乘不尽的情况。。。= =! 设想是js的运算算法里面包含了除法 没想到是这样的的 = =! js解释器的作者们真心强啊。。。 除了下文提及的解决方法之外 还有一个就是如果浮点的小数位确定时 比如价格是小数点后两位的 那么我们可以把价格乘以100 运算完之后再作相应的处理 这样会涉及一个位数过大(比如我这个价格要算个n次方的话就......)而转字符串处理的问题 这样效率本来就不高的算法而变得更加笨重 呃 但是下文的通过字符串切割分成小数部分和整数部分运算再算结果的这个方法效率貌似也不怎的 因此如何取舍就看诸君的需求了
转自:http://topic.csdn.net/u/20120329/17/6cc27133-a13f-4b9d-b253-fc8a04fd2f5c.html
-----------------正文-----------------
最近做js是对浮点类型计算时总是有偏差比如
3*0.8输出2.4000000000000003
在网上查了一下原因:
用解析字符串的方式移动小数点,转化为整数,完毕后,在把小数点复位。
浮点数运算的时候,先转化为二进制,用二进制来算,结果再转回十进制
例如 :求1038.1-1000
1038.1=10000001110.0001100110011001100110011001100110011001100.....
1000= 1111101000
1038.1转化为二进制是个无限循环小数,1100是循环节,只能取近似值,误差就是这里产生的
如果浏览器版本高,可以用toFixed() 方法可把 Number 四舍五入为指定小数位数的数字.
后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。
语法
NumberObject.toFixed(num)
返回值
返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。
抛出
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
在本例中,我们将把数字舍入为仅有一位小数的数字:
Show the number 13.37 with one decimal:
<script type="text/javascript">
var num = new Number(13.37);
document.write (num.toFixed(1))
</script>
输出:
Show the number 13.37 with one decimal:
13.4
解决方法:
function accMul(arg1,arg2) //将浮点类型转为整形操作完回归小数
{
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
分享到:
相关推荐
此函数是我自己写的,虽然在网上可以搜到很多,不过我找到的都是在算法中存在基本的浮点数的运算,导致结果仍然是错误的。由于刚刚学写JS,所以可能考虑不够周全,望大家批评指正。 代码中加了四舍五入函数,是网上...
JavaScript中的浮点运算问题主要源于数字类型(Number)的表示方式,这是由IEEE-754标准决定的。在计算机科学中,浮点数并非总是精确的,尤其是当它们以二进制形式存储时。例如,十进制的小数0.1、0.2或0.3在二进制下...
本文将详细介绍如何解决JavaScript中的浮点型运算BUG,并提供一些实用的函数来实现更精确的计算。 首先,我们要理解JavaScript中的浮点数运算误差。在计算机内部,浮点数是以二进制形式存储的,但不是所有十进制...
JavaScript 只有一种数字类型 Number ,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的。 浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的: 十进制 二进制0.1 0.0001 ...
javascript做带小数的计算时,会出现9的循环,以下方法帮助解决。 第一个参数是需要处理的数值,第二个参数是需要保留的小数位数。自家项目里面就这么用了~ 代码如下: function round(v,e){ var t=1; for(;e>0;t*=10...
本文将深入探讨这一现象的原因,并提供几种有效的解决方法。 #### 二、原因分析 要理解为什么会出现这种精度误差,我们需要了解计算机内部如何表示浮点数。计算机通常使用IEEE 754标准来存储和计算浮点数。在该标准...
JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 ...
另一种方法是扩展JavaScript的Number对象,通过在其 prototype 上添加自定义方法来实现精确的浮点运算。这样,可以直接使用扩展后的Number对象方法来完成加、减、乘、除运算,而不需要额外调用自定义函数。以下是...
使用场景及目标:帮助读者理解和掌握JavaScript中正则表达式的创建和使用,解决实际开发中常见的字符串匹配和处理问题。 阅读建议:在学习过程中结合具体示例进行实践,注意理解不同方法的区别和应用场景,通过不断...
以下是一些解决IE不能运行JavaScript的方法: 1. **启用JavaScript**:首先检查IE浏览器的设置,确保JavaScript是开启状态。打开“工具”菜单(或按`Alt+X`),选择“Internet选项”,然后转到“安全”选项卡。点击...
在JavaScript中,浮点数(小数)的计算可能会出现一些看似奇怪的结果,这主要是由于计算机内部表示浮点数的方式导致的。这个问题是许多开发者在编写JavaScript代码时可能遇到的一个常见陷阱。本文将深入探讨这个问题...
javascript解决URL传值时乱码的方法.doc
javascript技巧(javascript调用C#方法) 个人笔记
每个问题都提供了详细的答案和解析,涵盖了JavaScript的高级特性、常见问题及解决方法等内容,是学习JavaScript进阶知识的绝佳资源。 ### 内容特点: 1. **广泛涵盖**:问题列表涵盖了JavaScript语言的各个方面,...
解决这个问题的方法通常是重新下载一个完整且未经篡改的ISO镜像文件,并确保在安装前验证其完整性,例如通过校验MD5或SHA1哈希值。 接下来,我们来看"JavaScript_ProjectSystem.msi"和"JavaScript_LanguageService....
文档中提到的“Javascript中浮点数相乘的一个解决方法”,便是这样一种方案。该方法的目的是通过转换浮点数,确保乘法运算的精度。 该方案的核心思想是把浮点数转换成整数,然后再进行乘法运算,最后通过除以10的N...
由于JavaScript内部使用的是IEEE 754标准来存储和处理浮点数,这可能导致在进行小数运算时出现精度丢失问题,尤其是在涉及大数字或者循环计算时。本篇将深入探讨这个问题,并提供一些解决方案。 首先,我们来理解...
JavaScript的基础语法包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、Symbol)、运算符(算术、比较、逻辑、位运算、三元运算)以及流程控制(if语句、switch...