1. JS를 사용하여 계산하십시오
12.32 * 7 결과는 무엇입니까?
답 : 86.240000000000001
이 문제가 발생하는 이유는 무엇입니까? 그것을 해결하는 방법?
JS가 곱셈과 소수의 분할을 다룰 때 버그가 있습니다. 해결책은 다음과 같습니다. 소수점을 정수로 바꾸어 처리 할 수 있습니다.
위의 계산은 다음으로 변경할 수 있습니다.
12.32 * 100 * 7 /100
결과는 다음과 같습니다. 86.24, 정확합니다.
다시 계산합시다 :
8.80 * 100 * 12 / 100
결과 : 105.600000000000002
38.80에서도 비슷한 문제가 발생합니다.
정확도를 10 배 늘립니다.
8.80 * 1000 * 12 / 1000
결과 : 105.6
정상입니다.
16.40 * 10000000 * 6 / 10000000
결과에 문제가 있습니다
JS 실행을보다 정확하게 만들기 위해, 후속 JS 소수점 계산에서 값을 10,000 배로 직접 확장 한 다음 10,000으로 나뉘어 문제를 해결할 수 있습니다.
var num = 38.80;
var num2 = 13;
경고 (Num * 10000 * 12 / 100000);
곱하고 나누어 나게 한 숫자는 테스트에 가장 적합합니다. 일부 숫자는 더 작을 때 문제가 있으며 일부 숫자는 더 클 경우 (1000,000) 문제가 있습니다.
둘,
<cript> number.prototype.rate = function () {varostr = this.toString (); if (ostr.indexof ( ".") ==) return1; elsereturnmath.pow (10, parseint (ostr.length-ostr.indexof ( "));}); 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 (); retiontemp}); </스크립트>이 솔루션은 더 번거로운 솔루션이지만이 문제를 해결하는 실제 과정에 대한 대략적인 이해를 제공 할 수 있습니다.
// 나누기 기능은 정확한 분할 결과를 얻는 데 사용됩니다. 참고 : JavaScript의 분할 결과에 오류가 발생하며, 이는 두 개의 부동 소수점 번호를 나눌 때 더 분명합니다. 이 기능은보다 정확한 분할 결과를 반환합니다. // 호출 : accdiv (arg1, arg2) // 반환 값 : arg1의 정확한 결과는 arg2 function accdiv (arg1, arg2)로 나눈 {var t1 = 0, t2 = 0, r1, r2; try {t1 = arg1.tostring (). split ( ") th} catch (e) {} with (math) {r1 = number (arg1.toString (). 교체 ( ".", ")) r2 = 숫자 (arg2.toString (). 교체 (". ",") retur (r1/r2)*pow (10, t2-t1);}} // 숫자 유형에 div 메소드를 추가하여 호출하는 것이 더 편리합니다. number.prototype.div = function (arg) {return accdiv (this, arg);} // 다중 함수는 정확한 곱셈 결과를 얻는 데 사용됩니다. 이 기능은보다 정확한 곱셈 결과를 반환합니다. // 전화 : AccMul (Arg1, Arg2) // 반환 값 : Arg1의 정확한 결과에 Arg2 함수 Accmul (Arg1, Arg2) {var를 곱한 정확한 결과 m = 0, s1 = arg1.tostring (), s2 = arg2.tostring (); try {m+= s1.split ( ".") 숫자 (s1.replace ( ".", ")*번호 (s2.replace (". ","))/math.pow (10, m)} // 숫자 유형에 MUL 메소드를 추가합니다. number.prototype.mul = function (arg) {return accmul (arg, this);} // 추가 함수는 정확한 추가 결과를 얻는 데 사용됩니다. 이 기능은보다 정확한 추가 결과를 반환합니다. // 전화 : AccAdd (Arg1, Arg2) // 반환 값 : Arg1 Plus Arg2 기능 Accadd (Arg1, Arg2)의 정확한 결과 {var r1, r2, m; try {r1 = arg1.tostring (). split ( ".") (arg1*m+arg2*m)/m} // 숫자 유형에 추가 메소드를 추가하여 호출하는 것이 더 편리합니다. 번호 .prototype.add = function (arg) {return accadd (arg, this);}위의 JavaScript Decimal Amptiplication Org Handling은 내가 공유 한 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.