修复小数计算精度不准确方法

Number.prototype.mul = function (arg) {
        var m = 0, s1 = this.toString(), s2 = arg.toString();
        try {
            m += s1.split(‘.‘)[1].length
        } catch (e) {
        }
        try {
            m += s2.split(‘.‘)[1].length // m是累加结果
        } catch (e) {
        }
        return Number(s1.replace(‘.‘, ‘‘)) * Number(s2.replace(‘.‘, ‘‘)) / Math.pow(10, m) // 直接去掉小数点,转为整型计算,最后缩小n倍
    };

function louis(arg){
    var m=0, s1 = arg.toString();
    try {
      m = s1.split(‘.‘)[1].length;
    } catch (e) {
    }
    return Number(s1.replace(‘.‘,‘‘))/Math.pow(10,m-2)
};

原文地址:https://www.cnblogs.com/qdjl/p/12572624.html

时间: 03-26

修复小数计算精度不准确方法的相关文章

关于js浮点数计算精度不准确问题的解决办法

今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精度的文章.觉得别人写的挺好了,我在简单的总结一下,以方便后续查阅. 浮点数误差产生的原因: 先看一个实例: 0.1 + 0.2 =? 0.1 + 0.2 = 0.3? 我们先来看一段 JS. console.log( 0.1+ 0.2); 输出为 0.30000000000000004.是不是很奇葩

JS数字计算精度误差的解决方法

本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了.但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了. 不信?我们可以做个试验. 先来看一段 JS. var num1 = 0.1; var num2 = 0.2; alert(num1+num2 ===

计算机程序的思维逻辑 - 小数计算为什么会出错?

违反直觉的事实 计算机之所以叫"计算"机就是因为发明它主要是用来计算的,"计算"当然是它的特长,在大家的印象中,计算一定是非常准确的.但实际上,即使在一些非常基本的小数运算中,计算的结果也是不精确的. 比如: float f = 0.1f*0.1f; System.out.println(f); 这个结果看上去,不言而喻,应该是0.01,但实际上,屏幕输出却是0.010000001,后面多了个1. 看上去这么简单的运算,计算机怎么会出错了呢? 简要答案 实际上,不是

HighChats图表控件显示精度小数点的方法

相信大家对highchats这个图表控件并不陌生,最近在项目中用到它,但是某些字段需要显示为小数点,顾查找资料文档发现下面两个方式可以实现: 初始化时候添加如下两个参数 tooltip:{??? formatter:function(){??? return''+this.point.name+': '+Math.round(this.percentage)+' %';??? }},plotOptions:{?????? pie:{?????? allowPointSelect:true,???

poj 百练 2765 八进制小数(精度问题)

2765:八进制小数 查看 提交 统计 提示 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 八进制小数可以用十进制小数精确的表示.比如,八进制里面的0.75等于十进制里面的0.963125 (7/8 + 5/64).所有小数点后位数为n的八进制小数都可以表示成小数点后位数不多于3n的十进制小数. 你的任务是写一个程序,把(0, 1)中的八进制小数转化成十进制小数. 输入 输入包括若干八进制小数,每个小数占用一行.每个小数的形式是0.d1d2d3 ... dk,这里di

shell的数值计算,小数计算

shell脚本中,可以进行数值计算, 如加减乘除,通过expr.let.(())等完成,文章介绍:http://blog.csdn.net/longshenlmj/article/details/14166193 但是上面的运算只支持整数. 小数计算怎么办? shell中小数计算 通过bc,awk和nawk工具等完成 使用bc的代码如: click=`awk -F"\t" '$1==2 {print $2}' ctr_result.txt` show=`awk -F"\t&q

python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?

1. 使用格式化(不推荐) 1 2 3 >>> a = "%.30f" % (1/3) >>> a '0.333333333333333314829616256247' 可以显示,但是不准确,后面的数字往往没有意义. 2. 高精度使用decimal模块,配合getcontext 1 2 3 4 5 6 7 8 9 10 11 12 >>> from decimal import * >>> print(getcon

js 小数计算为啥和想象中不一样!

今天遇到了一个比较有趣的事,如果要你计算0.1+0.2等于多少你会怎么回答? "0.3啊!"你可能都不会考虑.我也一样,当a=0.1,b=0.2时 if(a+b === 0.3){...}.我可能等一下午都等不到大括号中的内容被执行. 为啥呢?因为在js中0.1+0.2=0.30000000000000004.说起来你可能不信,又或者去验证一下.结果为啥是这样?在我查找资料之后豁然开朗.对于浮点型数据,大多语言计算都会丢失精度.但是像c++/java这种厉害的语言都有自己封装的一套方法

js保留小数点后N位的方法介绍

利用toFixed函数 代码如下 复制代码 <script language="javascript"> document.write("<h1>JS保留两位小数例子</h1><br>"); var a=2.1512131231231321; document.write("原来的值:"+a+"<br>"); document.write("两位小数点:&q

js取float型小数点后两位数的方法

四舍五入以下处理结果会四舍五入:' var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45 不四舍五入以下处理结果不会四舍五入:第一种,先把小数边整数: Math.floor(15.7784514000 * 100) / 100  // 输出结果为 15.77 第二种,当作字符串,使用正则匹配: Number(15.7784514000.toString().match(/^\d+(?:\.\d{0,2})?/))  // 输出结果为