0이 많이 붙은 큰 숫자는 다음과 같은 방법을 사용해 씁니다.
'e'
뒤에 추가합니다. 123e6
은 0이 6개인 숫자, 123000000
을 나타냅니다.'e'
다음에 음수가 오면, 음수의 절댓값 만큼 10을 거듭제곱한 숫자로 주어진 숫자를 나눕니다. 123e-6
은 0.000123
을 나타냅니다.다양한 진법을 사용할 수도 있습니다.
0x
), 8진수(0o
), 2진수(0b
)를 바로 사용할 수 있게 지원합니다.parseInt(str, base)
를 사용하면 str
을 base
진수로 바꿔줍니다(단, 2 ≤ base ≤ 36
).num.toString(base)
는 숫자를 base
진수로 바꾸고, 이를 문자열 형태로 반환합니다.12pt
나 100px
과 같은 값을 숫자로 변환하는 것도 가능합니다.
parseInt/parseFloat
를 사용하면 문자열에서 숫자만 읽고, 읽은 숫자를 에러가 발생하기 전에 반환해주는 ‘약한’ 형 변환을 사용할 수 있습니다.소수를 처리하는 데 쓰이는 메서드는 다음과 같습니다.
Math.floor
, Math.ceil
, Math.trunc
, Math.round
, num.toFixed(precision)
를 사용하면 어림수를 구할 수 있습니다.이 외에도 다양한 수학 함수가 있습니다.
일반적인 숫자(-2^53 ~ 2^53)의 경우, 64비트 형식의 IEEE-754(부동소수점 표현 표준)에 저장된다.
숫자를 입력하는 다양한 방법
number.toString(base) : base진법으로 number를 변환(String 반환) * base 최대값은 36이다.
숫자 메서드 호출시 .을 두 개 사용해야 소수점과 헷갈리지 않는다. * 123456..toString(36)
어림수를 구하는 다양한 방법
ex) alert( 0.1 + 0.2 == 0.3 ); // false
자바스크립에서는 0에서도 부호비트가 유효하기 때문에 -0과 0이 둘 다 존재한다.
Infinity : 그 어떤 숫자보다 크거나 작은값
NaN(Not a Number) : 에러를 나타내는 값
isFinite(value) : value가 숫자인지 검증하는 메소드 * 빈문자열, 공백만 있는 문자열은 0으로 취급됨
비교결과가 정확해야하는 경우,
를 사용한다.
(NaN, NaN) // true
(0, -0) // false
는 동일한 결과를 출력한다.
연산자 + 와 Number()를 사용하여 숫자형으로 변환할 때는 피 연산자가 숫자형식이 아니면 NaN를 밷는다.
이럴때 parseInt나 parseFloat을 사용하면 효율적으로 변환이 가능하다.
/* toString(base) - 아래 둘 중에 한 가지 방법으로 사용 */
console.log( 999999..toString(36) ); // lflr
console.log( (999999).toString(36) ); // lflr
//////////////////////////////////////////
let num = 1.23456;
console.log( num.toFixed(2) ); // 1.23
⇒ 1번
let num1 = +prompt("수를 입력하세요"); // 13 입력
alert(typeof num1); // number
let num2 = prompt("수를 입력하세요"); // 123 입력
alert(typeof num2); // string
let num3 = +prompt("수를 입력하세요"); // 14 입력
alert(typeof num3); // number
alert(num1 + num3); // 27 출력
alert(num1 + num2); // "13123" 출력
⇒ 2번
// 2-1
let i = 0;
while (i != 10) {
i += 0.2;
}
// -----------------------------------------------
// 2-2
let i = 0;
while (i < 11) {
i += 0.2;
if (i > 9.8 && i < 10.2) console.log( i ); // 9.999999999999996 10.199999999999996
}
다른 것도 중요하지만, 이번 목차를 배우면서 가장 인상 깊었던 것은 정밀도 손실이다. 우리가 생각하는 정수 + 정수도 잘못하면 정밀도 손실로 인해 생각했던 것과는 다른 결과를 얻을 수도 있다는 것에 적지 않은 충격을 받았다.
하물며, 계산에 소수를 포함한 다양한 수를 만나면 더욱 큰 정밀도 손실로 인한 에러를 얻을 수도 있을 것이다.
나중에 계산과 관련된 프로그래밍을 할 때 생각지 못한 결과를 얻게 된다면, 프로그래밍을 잘못했다기 보다는 정밀도 손실로 인한 결과임을 깨닫고, 해결하는 내가 되길 바란다.