문제가 발생하기 쉬운 때 JS 정밀도 부동 소수점 연산
1) 나눗셈 기능
// 참고 : 분할 결과, 두 개의 부동 소수점 부문은 더 명백 할 것이다 자바 스크립트 오류가있을 것입니다. 이 기능은 분할의 결과가 더 정확 반환합니다.
// 전화 : accDiv (ARG1, ARG2)의
반환 값 : // ARG1 분할의 정확한 결과 ARG2
함수 accDiv (ARG1, ARG2) {
T2 = 0, R1, R2 var에 T1 = 0;
은 try {T1 = arg1.toString을 () .split를 "." [1] .length} 캐치 (E) {} // - 소수점 길이
. "."시도 { T2 = arg2.toString () 분할 [1] .length } 캐치 (전자) {} // - 소수점 후 길이
(수학)와 {
R1은 = 번호는 (arg1.toString는 () ")." "(교체".) // - 정수 제거 소수점
R2 = 번호 (arg2.toString (. "." // -)) ","(대체) 정수 소수점 제거
창 (R1 / R2) * POW (10, T2-T1)] // --- 정수 나눗셈 10 진수의 길이의 제곱을 곱한
}
}
2) 승산 기능
// 설명 : 오류가있을 것입니다 자바 스크립트 곱셈 결과 때 두 개의 부동 소수점 곱셈 더 분명. 이 기능은보다 정확한 곱셈 결과를 반환합니다.
// 전화 : accMul (ARG1, ARG2)의
값을 리턴 // : 정확한 결과 ARG1 승산 ARG2
함수 accMul (ARG1, ARG2) {
VAR의 m = 0, S1 = arg1.toString을 (), S2 = arg2.toString ()를 ]
은 try {[. 1] m + = s1.split ( ".")} 캐치 (E) {} .length
은 try {[. 1] m + = s2.split ( ".")} 캐치 (E) {.length}
리턴 번호 (s1.replace ( ".", "")) * 번호 (s2.replace ( ".", "")) / Math.pow (10 m)
}
3) 또한 함수
// 설명 : 두 개의 부동 소수점 더 분명 추가 할 때 가산 결과는, 오류가 될 것입니다 자바 스크립트. 이 기능은보다 정확한 또한의 결과를 반환합니다.
// 전화 : accAdd (ARG1, ARG2)의
반환 값 : // 첨가 정확한 결과 ARG1에 ARG2
기능 accAdd (ARG1, ARG2) {
VAR R1, R2, m을,
은 try {R1 = () 스플릿 ( "Arg1.toString. . ")는 [. 1]} 캐치 (E) R1 = {0} .length
."). 1]} 캐치 .length (E) R2 = {0} {시도 arg2.toString R2 = (). 스플릿 ( "
m을 Math.pow = (10 Math.max (R1, R2))
창 (ARG1에 ARG2 * m +에서의 m) / m
}
4) 감산 기능
함수 accSub (ARG1, ARG2) {
VAR의 R1, R2, m, n은;
R1 = {arg1.toString ()를. 분리 "."[1] .length} 시도 캐치 (E) {R1 = 0}
{시도 arg2.toString R2 = (). 분할 "."[1] .length} 캐치 (E) {R2 = 0}
m = Math.pow (10 Math.max (R1, R2));
deeka 마지막으로 수정 //
//动态控制精度长度
N = (R1> R2 =) R1 : R2;
창 ((ARG1에 * m-ARG2에 *를 m) / M)이 (N) .toFixed;
}