2010-05-20 4 views
4

자바 스크립트에서 toString 및 valueOf는 10 진수 뒤에 0을 자르는 것을 발견했습니다. 예 :toString 및 valueOf는 십진법 뒤의 0을 자릅니다.

var num = 0.00 
var num2 = 0.0100 

num.valueOf() or num.toString() // outputs 0 
num2.valueOf() or num2.toString() // outputs 0.01 

정상적인 동작이며 후행 0을 유지할 수 있습니까?

편집 : 위의 내용이 문제의 근본 원인임을 몇 가지 테스트를 통해 알았 기 때문에 원래 질문을 변경했습니다. 감사.

+0

"제대로 작동하지 않는다"고 말하면 무엇이 잘못됩니까? 어떤 식 으로든 디버깅 해 보셨습니까? – Pointy

+0

형식 함수는 '스타일'변수를 사용하여 출력해야하는 소수 자릿수를 결정해야합니다. 첫 번째 방법을 사용하면 소수점 이하가 잘리지 만 두 번째 방법을 사용하면 올바르게 출력됩니다. 형식 함수 자체는 잘 작동합니다. 위의 방식으로 스타일을 전달할 때만 형식() (방법 1) 부분 또는 외부 (방법 2) 사이에 .toString을 갖는 것의 차이점이 있는지 궁금합니다.). – Choy

+0

Firebug 용 일부 "console.log"또는 일부 경고 또는 "typeof"가 반환하는 것을 보는 것이 무엇이든지 삽입했는지, if 문에서 호출 할 때 "toString"의 결과는 무엇입니까? – Pointy

답변

4

십진법 후 0을 자르는 것이 toString도 아니고 valueOf도 아닙니다! 당신이 소수를 이런 식으로 쓸 때
는 :

var num2 = 0.0100 

당신이 변수 NUM2 지난 2 제로부터 진수 0.0100, 즉 0.01를 포함해야한다는 당신의 통역을 말하고있다을 의미하지 않습니다.

0.0100 
0.010 
0.01 
0.01000 

모두 똑같은 수 있고 그래서 모든 메모리에 동일한 방식으로 표현된다 :
진수 숫자는 10 진수로 표시되는 메모리이다. 그것들을 구별하는 것은 불가능합니다.
num2 값 0.01에 0, 하나 또는 둘 이상의 후행 0이있는 번호를 쓰는 것이 할당되었는지 알 수 없습니다.

10 진수를 쓰는 방식으로 저장하려면 문자열로 저장해야합니다.

+0

설명해 주셔서 감사합니다. – Choy

+0

환영합니다 :-) –

2

(자바 스크립트의 경우) 0-(가능한 경우 중지 하시겠습니까? 정상적인 동작입니다. 문자열을 반환하면 문자가 나타나도록 강제 할 수 있습니다.

var n= '0.0' 
alert(n)>> 0 
alert(n.toFixed(5))>> '0.00000' 
alert(n.toPrecision(5))>>'0.0000' 
+1

문자열에 쓰여진 것과 정확히 일치하는 숫자로 변환하려고 할 때 숫자에 0, 2, 5 등이있을 수 있습니다. toFixed 또는 toPrecision을 사용하려면 거기에 몇 개의 후행 0이 있는지 미리 알고 있어야합니다. – Choy