A detailed explanation of the decimal point multiplication Division problem of JavaScript (JS)

Source: Internet
Author: User
Tags mul pow

  This article is mainly on the JavaScript (JS) decimal Point Multiplication Division problem is introduced in detail, the need for friends can come to the reference, hope to help everyone else

First, with JS calculation 12.32 * 7   The result is how much? Answer: 86.24000000000001   Why is there such a problem? How to solve? JS in processing decimal multiplication and division of the time there is a bug, the solution can be: The decimal into an integer to deal with. The above calculation can be changed to: 12.32 * 100 * 7/100 results are: 86.24, correct.   A further calculation: 8.80 * 100 * 12/100 results: 105.60000000000002 38.80 There will be similar problems.   accuracy increased 10 times times: 8.80 * 1000 * 12/1000 results: 105.6 normal.   16.40 * 1000000 * 6/1000000 results also have problems   in order to allow JS to perform more accurately, in the next JS decimal calculation directly Expand the value of 10,000 times times, and then divided by 10000, you can solve the problem. var num = 38.80; var num2 = 13; Alert (NUM * 10000 * 12/10000); The number of   multiplied and removed was tested 10000 the most appropriate, small number of problems, big (1000000) some numbers are also problematic.   II     code as follows: <script defer> number.prototype.rate=function () {varostr=this.tostring (); if ( Ostr.indexof (".") ==-1) Return1; Else Returnmath.pow (10,parseint (Ostr.length-ostr.indexof (".") -1)); }   Functiontran () {args=tran.arguments; vartemp=1; for (i=0;i<args.length;i++) temp*=args[i]*args[i].rate (); for (i=0;i<args.length;i++) temp/=args[i].rate (); RETURNTEMP} alert (Tran (11,22.9)); </script>     The solution is a tricky one, but it gives you a general idea of how to solve thisThe actual process of a problem. The code is as follows://Division function, to get the exact division result//Description: JavaScript division results will be error, the two floating-point numbers are more obvious when dividing. This function returns a more precise division result. Call: Accdiv (ARG1,ARG2)//return value: Arg1 divided by arg2 exact result function Accdiv (arg1,arg2) {var t1=0,t2=0,r1,r2; Try{t1=arg1.tostring () . Split (".") [1].length}catch (e) {} try{t2=arg2.tostring (). Split (".") [1].length}catch (e) {} with (Math) {R1=number (arg1.tostring (). Replace (".", ")) R2=number (Arg2.tostring (). Replace (". " , "")) return (R1/R2) *pow (10,T2-T1); }  //Add a Div method to the number type, which is more convenient to call. Number.prototype.div = function (ARG) {return Accdiv (this, arg);}  //multiplication function, to get the exact result of multiplication//description: JavaScript multiplication results will be error, It is more noticeable when multiplying two floating-point numbers. This function returns a more accurate result of the multiplication. Call: Accmul (ARG1,ARG2)//return value: Arg1 times Arg2 's exact result 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)}  // Adding a Mul method to the number type is more convenient to call. Number.prototype.mul = function (ARG) {return Accmul (arg, this); The  //addition function, which is used to get the exact addition result//description: The addition of JavaScript will have errors, it will be more obvious when the two floating-point numbers are added. This function returns a more precise addition result. Call: Accadd (ARG1,ARG2)//return value: Arg1 plus arg2 exact result function Accadd (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}  //Add an Add method to the number type. More convenient to call up. Number.prototype.add = function (ARG) {return accadd (arg,this);}
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.