浏览 4996 次
锁定老帖子 主题:Javascipt中精确小数运算的实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-11
基于Web的应用程序,经常需要在页面中作些简单的计算,用作数据提交前的验证,或者给用户提供更友好的信息。但由于十进制小数并不总能用二进制小数精确表示,在进行小数运算时,经常会出现“莫明其妙”的误差,比如“33*2.46=81.179999999999999”之类的。如果要在页面上显示计算结果,特别是当这个结果表示金额的时候,误差通常是不可容忍的。 网上有人说Javasript不能做精确运算,所以会出现误差云云。这当然是不对的,这种情况应该是由计算机二进制表示的本质决定的。应该说,Javascript的表现其实还好一些,因为在数字进行运算之前,我们总是可以得到它的精确表示(字符串)。 解决问题的基本思路就是牺牲速度换精度,逐位进行运算,并且自己在程序逻辑中实现进位。为此,Java提供了BigDecimal类。而在Javascript中,我们就没这么幸运了,没有现成的类库可供使用。可能是制订规范的人也认为没必要使用JS来做“科学计算”吧。 我以前做的项目中,经常会碰到计算金额总价、合计、总计之类的“商业计算”,对精确小数运算的需求还是比较迫切的,所以自己开发了一个小数运算的“类”。实现这个类的时候,使用了投机取巧的办法:把小数转换为整数,运算完成后,再转换回去。它唯一能解决的问题就是:避免十进制小数和二进制小数之间的转换误差;它不能提高运算的精度(有效数字),也不能扩大数字的表示范围。 使用方法如下: js 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |