chorme加减乘除浮点数处理

在处理简单的1-0.7的时候发现chorme给的结果竟然是0.30000000000000004,瞬间蛋疼了,这数据能用?!

然后去百度找到了简单的两个数的加减乘除,然后修改了下,除了除法都可以多个数进行操作。那样3个数相加就不用套个add函数了。

原网址:http://www.2cto.com/kf/201502/376763.html

function add() {

var e,arr=[0],result = 0;

for (var i = 0; i < arguments.length; i++) {

try {

arr.push(arguments[i].toString().split(".")[1].length);

} catch (f) {}

};

arr.sort(function(a,b){return(b-a)});

e = Math.pow(10, arr[0]);

for (var i = 0; i < arguments.length; i++) {

try {

result += mul(arguments[i],e)

} catch (f) {}

};

return result / e;

}

function sub() {

var e,arr=[0],result;

for (var i = 0; i < arguments.length; i++) {

try {

arr.push(arguments[i].toString().split(".")[1].length);

} catch (f) {}

};

arr.sort(function(a,b){return(b-a)});

e = Math.pow(10, arr[0]);

result = mul(arguments[0],e);

for (var i = 1; i < arguments.length; i++) {

try {

result -= mul(arguments[i],e)

} catch (f) {}

};

return result / e;

}

function mul() {

var result = 1,c = 0;

for (var i = 0; i < arguments.length; i++) {

try {

c += arguments[i].toString().split(".")[1].length;

} catch (f) {}

};

for (var i = 0; i < arguments.length; i++) {

result *= Number(arguments[i].toString().replace(".", ""));

};

result /= Math.pow(10, c);

return result;

}

function div(a, b) {

var c, d, e = 0,

f = 0;

try {

e = a.toString().split(".")[1].length;

} catch (g) {}

try {

f = b.toString().split(".")[1].length;

} catch (g) {}

return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), mul(c / d, Math.pow(10, f - e));

}

时间: 2024-10-06 19:36:26

chorme加减乘除浮点数处理的相关文章

由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入

public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入. */ // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private Arith() { } /** * 提供精确的加法运算. * * @param v1 * 被加数 * @param v2 * 加数 * @return 两个参数的和 */ p

php浮点数加减乘除bug

项目测试阶段,少部分微信支付成功,但是在异步通知校对订单金额是否一致时,一直被认定订单金额不一致. 类似于: 浏览器输出: 分析: 因为计算机二进制无法准确表示部分浮点数(如2.03.0.58等等),在对浮点数作比较前,应该在加减乘除运算后,进一步精确小数位运算. 原文地址:https://www.cnblogs.com/xincanzhe/p/10262280.html

Javascript优化后的加减乘除(解决js浮点数计算bug)

说明 众所周知,js在计算浮点数时候,结果可能会不准确.比如:(在chrome中的运算结果) 2.2 + 2.1 = 4.300000000000001 2.2 - 1.9 = 0.30000000000000027 2.2 * 2.2 = 4.840000000000001 2.1 / 0.3 = 7.000000000000001 网上流传的代码(有bug) 网上流传的优化后的代码如下(有问题的代码,请勿使用) function add(a, b) { var c, d, e; try {

解决JS浮点数(小数)计算加减乘除的BUG

/**  ** 加法函数,用来得到精确的加法结果  ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果.  ** 调用:accAdd(arg1,arg2)  ** 返回值:arg1加上arg2的精确结果  **/ function accAdd(arg1, arg2) {     var r1, r2, m, c;     try {         r1 = arg1.toString().split(".")[1].

JS浮点数的加减乘除运算

文章来源地址:http://blog.csdn.net/lyd518/article/details/7236464 转载请注明出处,尊重作者劳动成果,谢谢!问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比

浮点数加减乘除运算

//浮点数加法运算 function FloatAdd(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 (arg1*m+arg2*m)/m; } //浮点

精确的浮点数运算(加减乘除、四舍五入)

//默认除法运算精度 private static final int DEF_DIV_SCALE = 10; /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDec

js浮点数加减乘除精度不准确

做个记录,以备不时之需 //加法 Number.prototype.add = function(arg){ var r1,r2,m; try{r1=this.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)) return (this*m+arg*

4张纸加减乘除牌求24

昨天有个同学问我如何使用5,5,5,1这四个数加减乘除求出24,我想了很久才想出来答案. 还记得很久以前也玩过一个类似的游戏:翻出4张纸牌牌,用加减乘除求24. 对于这个问题,写了一个小程序解决: 程序如下:输入4个数和1个答案,给出运算的路径. 编程语言:C 环境:vs2012 运行结果如下: 关键流程如下: 1.求出把四张牌的24种排列顺序, 2.这24种排列中再更换中间的运算符的符号位置(4的3次方种情况) 3.以上每一种情况再对应4种括号位置:('.'表示符号) 1.(a.b).c).d