플로팅 -포인트 오류는 JS에서 곱셈의 곱셈 작동을 테스트 할 수 있습니다.
<cript>
경고 (11*22.9)
</스크립트>
결과는 251.9 대신 251.8999999999998입니다
많은 사람들의 두통이 있어야합니다. 그래서 그것을 해결하는 방법? 여기서 솔루션이 제공됩니다.
1,
다음과 같이 코드 코드를 복사하십시오.
<cript>
경고 (11*(22.9*10)/10);
</스크립트>
문제를 해결하는 대략적인 아이디어는 요인이 먼저 정수로 확대되고 최종적으로 해당 다중으로 나뉘어 지므로 올바른 결과를 얻을 수 있다는 것입니다.
2,
다음과 같이 코드 코드를 복사하십시오.
<스크립트 연기>
번호 .prototype.raate = function () {
var os.tostring ();
if (ostr.indexof ( ".") == -1)
반환 1;
또 다른
return math.pow (10, parseint (osr.length-organ.indexof ( ".");
}
함수 trans () {
args = trans.arguments;
var test = 1;
for (i = 0; i <args.length; i ++)
온도*= args [i]*args [i] .raate ();
for (i = 0; i <args.length; i ++)
온도/= args [i] .raate ();
반환 온도
}
경고 (트랜스 (11,22.9));
</스크립트>
이 솔루션은 더 번거로운 방법이지만이 문제를 해결하는 실제 과정을 이해할 수 있습니다.
4 개의 주택과 5 개의 수학 방법을 사용하여 4 개의 주택을 달성 할 수 있습니다. .
다음과 같이 코드 코드를 복사하십시오.
기능 포기 (Dight, How) {
Dight = Math.round (Dight*Math.Pow (10, How))/Math.pow (10, How);
반환 gign;
}
// 메소드를 제거하는 정확한 방법을 얻는 메소드를 제외하고
// 설명 : JavaScript의 결과에 오류가 발생하며 두 개의 플로팅 포인트 번호가 제거 될 때 분명합니다. 이 기능은보다 정확한 제거 결과를 반환합니다.
// 전화 : accdiv (arg1, arg2)
// 반환 값 : ARG1 ARG2의 정확한 결과를 제외한 Arg1
함수 accdiv (arg1, arg2) {{
var T1 = 0, T2 = 0, R1, R2;
{t1 = arg1.toString ()을 시도하십시오 ( "."[1] .length} catch (e) {}.
{t2 = arg2.toString ()을 시도하십시오 ( ".") [1] .length} catch (e) {}.
(수학) {
r1 = 숫자 (arg1.toString (). 교체 ( ".", ""))
r2 = 숫자 (arg2.toString (). 교체 ( ".", ""))
반환 (R1/R2)*Pow (10, T2-T1);
}
}
// 숫자 유형에 div 메소드를 추가하는데, 이는 호출이 더 편리합니다.
번호 .prototype.div = function (arg) {
return accdiv (this, arg);
}
// 정확한 곱셈 결과를 얻기위한 곱셈 기능
// 설명 : JavaScript 곱셈 결과의 결과는 오류가 발생하며 두 개의 플로팅 포인트 숫자가 곱하면 분명합니다. 이 기능은보다 정확한 곱셈 결과를 반환합니다.
// 전화 : accmul (arg1, arg2)
// 반환 값 : Arg1은 Arg2의 정확한 결과를 곱합니다.
기능 Accmul (Arg1, Arg2)
{{
varm m = 0, s1 = arg1.tostring (), s2 = arg2.tostring ();
{m+= s1.split ( ".") [1] .length} catch (e) {} 시도하십시오.
{m+= s2.split ( ".") [1] .length} catch (e) {} 시도하십시오.
반환 번호 (s1.replace ( ".", "")*번호 (s2.replace ( ".", "") /math.pow (10, m)
}
// 숫자 유형에 MUL 메소드를 추가하여 호출하는 것이 더 편리합니다.
번호 .prototype.mul = function (arg) {
반환 accmul (arg, this);
}
// 정확한 추가 결과를 얻기 위해 메소드를 추가합니다
// 설명 : JavaScript의 결과에 오류가 발생하며 두 개의 플로팅 포인트 번호가 추가되면 더 분명합니다. 이 기능은 추가 결과를 더 정확하게 반환합니다.
// 전화 : aCDD (arg1, arg2)
// 반환 값 : Arg1 + Arg2의 정확한 결과
함수 acadd (arg1, arg2) {{
var r1, r2, m;
{r1 = arg1.toString ()을 시도하십시오 ( ".") [1] .length} catch (e) {r1 = 0}
{r2 = arg2.toString ().
m = math.pow (10, math.max (R1, R2))))
return (arg1*m+arg2*m)/m
}
// 호출이 더 편리한 숫자 유형에 추가 메소드를 추가합니다.
번호 .prototype.add = function (arg) {
acadd (arg, this)를 반환합니다.
}