전투에 웹 프런트 엔드를 얻기 : JS 부동 소수점 값 문제

먼저, 정수를 올바르게 표시 할 수 JS

Math.pow(2,53) //即9007199254740996
"9007199254740996".length //16
9007199254740993  // 9007199254740992

비고 :

53 1.2 전력이없는 길이의 값으로 설정
백조 정도의 총 개수 2
입력 사이에 16 내지 21 비트 3. 표시하지만, (+ 1 = 최고 최대 정상적인 발현되지 초과 9 + 1 등을 직접 위로) 적절하게 계산하는데 사용될 수
4.21 디스플레이 1E + 21

안전 값 (ES6) Number.isSafeInteger (NUM)를 결정한다 :

Number.isSafeInteger(9007199254740993)  // false (存在一个边界问题)
Number.isSafeInteger(990)  // true
Number.isSafeInteger(9007199254740993 - 990)  // true
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003

둘째, 부동 소수점 숫자

9007199254700.3333 //9007199254700.334
"9007199254700.334".length //17(包含小数点)

.000001 //0.000001
.0000001 //1e-7
1.0000001 //1.0000001

9.0071992547409919 //9.007199254740993

비고 :

(1) (53)의 전원이 아닌 양측 2 접합
2 전체 16 함께 반올림 넘어
소수점 수를 초과하거나, 반드시 상기 상방으로 절단되어 있지 않은 경우 (3)을
3 것 0.000001 디스플레이 1E-7,하지만 정수가 선행되지 않습니다

위 테스트 현상의 일부는 단지 표현에주의 및 숙박 기준을

셋째, 비트 (32 비트)

정확하게 2 ^ 53로 표현 될 수있는 JS 수치이지만 비트 동작 범위의 정상 동작이 32 비트가 계속되지만, 첫 번째 비트는 (10 비트 값으로 전송 2 ^ 31, 경계가되도록, 부호 비트로 2,147,483,648).

~~2147483647
2147483647
~~2147483648
-2147483648
~~2147483649
-2147483647
~~2147483650
-2147483646

비고 :

1. JS 시프트 연산자는 (|, << >>, ~ ^) 중간 시간의 사용을 제한하기에 특히 주목

비트 단위 연산이 볼 수 있듯이 2. 초과 부정적인 다시 저장 갈 것입니다

넷째, 취급이 소수점의 가격

일반적으로 치료 후 예를 들어 100으로 나눈 산술 차례, 정수 :

const priceMultiply=(a,b)=>(a*b*100+.5|0)/100; //乘法
priceMultiply(18.12,10) //181.2 //后面不带0的数字
(18.12*10).toFixed(2) //181.20 //后面带0的字符串
web前端开发学习Q-q-u-n:⑦⑧④-⑦⑧③-零①② ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法
(从零基础开始到前端项目实战教程,学习工具,职业规划)

참고 : 여기에 우리가에서는 toFixed () 함수 구문에주의해야합니다

NumberObject.toFixed(num)

이 오브젝트를 작성하는 숫자입니다 전에에서는 toFixed을 확보 할 필요가 그래서 그렇지 않으면 오류가 발생하지

//报错情况:
(null).toFixed(2)
(undefined).toFixed(2)
("222.333").toFixed(2)
//特殊:NaN是数字,但是无法取小数,也并不会报错
(NaN).toFixed(2)  //"NaN"

추천

출처blog.51cto.com/14592820/2463480