2012-09-01 4 views
4

주문 총계를 계산하기위한 스크립트를 만들고 있습니다. 가격을 변경할 수있는 특정 변수가 있으므로 일부 장 자리수가 발생합니다.Javascript에서는 toFixed()가 통화에 대해 충분히 정확합니까?

toFixed()이 숫자를 반올림하고 항상 동일한 결과를 얻을만큼 정확합니까?

편집 :

Number.prototype.toCurrency = function(){ 
    return Math.round(this*100)/100; 
} 

이 일관성 충분 : 내가 생각 해낸 해결책은 이 사용하는?

+0

아니요! 이것 좀 봐 : http://stackoverflow.com/q/566564/1001563 – noob

+0

'toFixed()'루틴은 단지 문자열 표현을 제공한다. 자바 스크립트 수치로 통화 수학을한다면 문제가 생길 것입니다. 기본적인 문제는 2와 5가 상대적으로 소수라는 것입니다. – Pointy

답변

2

브라우저간에 일관되게 작동하지 않으므로 toFixed을 사용하면 안됩니다.

자바의 모든 숫자는 배정도 부동 소수점 숫자입니다. 부동 소수점 숫자는 정의에 따라 정확하지 않으므로 숫자 표현 자체는 항상 정확한 결과를 얻을만큼 정확하지 않습니다.

자바 스크립트에서 예측 가능한 결과를 얻으려면 숫자의 정밀도 제한을 염두에 두어야합니다. 따라서 숫자를 올바르게 반올림 할 수있는 충분한 여유가 있어야합니다.

+0

첫 번째 주장에 대한 출처/참조를 제공하십시오 (* 브라우저간에 일관되게 작동하지 않습니다 *). –

+0

당신이 의미하는 바를 완전히 이해하지 못합니다. 숫자의 정밀도 제한을 염두에 두어야합니다. 따라서 숫자를 정확히 반올림 할 수있는 충분한 여유가 있습니다 ._ 소수 자릿수 2 자리 만 사용하는 통화 충분한 여백이 없어야합니까? – twiz

+0

@twiz : 그렇습니다. 거의 모든 계산에서 충분한 여유가 있습니다. – Guffa