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 * m) / m;
};
// 减法
Number.prototype.sub = function(arg) {
    return this.add(-arg);
};

// 乘法
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;} catch(e){}
    return Number(s1.replace(".", "")) * Number(s2.replace(".", ""))/ Math.pow(10, m);
};
// 除法
Number.prototype.div = function(arg) {
    var t1 = 0, t2 = 0, r1, r2;
    try {t1 = this.toString().split(".")[1].length;}catch(e){}
    try {t2 = arg.toString().split(".")[1].length;}catch(e){}
    with (Math) {
        r1 = Number(this.toString().replace(".", ""));
        r2 = Number(arg.toString().replace(".", ""));
        return (r1 / r2) * pow(10, t2 - t1);
    }
};

//test
var a = 0.4;
var b = 0.3;
alert(Number(a).sub(b));
时间: 2024-12-14 04:25:35

js精确计算的相关文章

js浮点数相加、减、乘、除精确计算

js 浮点数计算时 ,无缘无辜 后边冒出一堆 小数点………… 貌似js本身的问题,类型不定?????? 只能自己写函数处理..  http://blog.csdn.net/w4bobo/article/details/9143663 借鉴一下 1 //调用:accAdd(arg1,arg2) 2 //返回值:arg1加上arg2的精确结果 3 function accAdd(arg1,arg2){ 4 var r1,r2,m; 5 try{r1=arg1.toString().split(".&

JS根据身份证号码精确计算年龄和性别

1 /** 2 * 根据身份证号得到姓别和精确计算年龄 3 */ 4 function analyzeIDCard(IDCard){ 5 var sexAndAge = {}; 6 //获取用户身份证号码 7 var userCard = IDCard; 8 //如果身份证号码为undefind则返回空 9 if(!userCard){ 10 return sexAndAge; 11 } 12 //获取性别 13 if(parseInt(userCard.substr(16,1)) % 2 ==

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

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

js浮点数计算问题 + 金额大写转换

一 js浮点数计算问题解决方案: 1.使用 NumberObject.toFixed(num) 方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 2.较精度计算浮点数 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1, arg2) { var r1, r2, m; t

JS 精确乘除法

javascript(js)的小数点乘法除法问题 分类: Javascript2012-07-24 10:09 2851人阅读 评论(0) 收藏 举报 javascriptfunctionmath测试div 一.用js计算 12.32 * 7  结果是多少? 答案:86.24000000000001 为什么会出现这种问题?怎么解决? js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变为整数来处理. 以上的计算可以改为: 12.32 * 100 * 7 /100 得出的结果是:8

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 {

第二章 Java浮点数精确计算

1.实际意义 在实际开发中,如果需要进行float或double的精确计算(尤其是财务计算),直接使用float或double是不行的(具体的例子看下边的代码的main方法的测试结果),需要使用BigDecimal. 2.代码 package com.xxx.util; import java.math.BigDecimal; /** * 浮点数精准算法 */ public class BigDecimalArithUtil { private static final int DIV_SCAL

Java中浮点型数据Float和Double进行精确计算的问题

一.浮点计算中发生精度丢失  大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个利用浮点型数据进行精确计算时结果出错的例子,使用Java编写,有所省略. double a = (1.2 - 0.4) / 0.1;System.out.println(a); 如果你认为这个程序的输出结果是“8”的话,那你就错了.实际上,程序的输出结果是“7.999999999999999”.好

JS下计算当前日期(当天)后N天出现NAN或者undefined的情况

前言: 帮客户做一个订单系统,需要一个日期1,一个日期2,默认情况下日期1为当天,日期2为明天,只是当时有些疑惑的是日期2偶尔会出现NAN的情况,今天在segmentfault.com看到了同样的问题,于是我觉得有必要再重温一下当时的问题.好好做一下到底是为什么? <!--date() NAN start--> 以下代码有问题,不建议直接使用,只是临时版本,后续再修改 <!DOCTYPE html> <html lang="en"> <head