질문 : JavaScript 수학, 소수점 둘째 자리로 반올림
다음 JavaScript 구문이 있습니다.
var discount = Math.round(100 - (price / listprice) * 100);
이것은 정수로 반올림됩니다. 소수점 이하 두 자리로 결과를 반환하려면 어떻게해야합니까?
답변
참고-3 자리 정밀도가 중요한 경우 편집 4 참조
var discount = (price / listprice).toFixed(2);
toFixed는 소수점 2 자리 이상의 값에 따라 반올림하거나 내림합니다.
예 : http://jsfiddle.net/calder12/tv9HY/
문서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
편집 -다른 사람들이 언급했듯이 결과를 문자열로 변환합니다. 이를 방지하려면 :
var discount = +((price / listprice).toFixed(2));
편집 2- 주석에서 언급했듯이이 함수는 정확도가 어느 정도 실패합니다. 예를 들어 1.005의 경우 1.01 대신 1.00을 반환합니다. 이 정도의 정확성이 중요한 경우 다음 답변을 찾았습니다. https://stackoverflow.com/a/32605063/1726511 시도한 모든 테스트에서 잘 작동하는 것 같습니다.
하지만 한 가지 사소한 수정이 필요하지만, 위에 링크 된 답변의 함수는 1로 반올림 할 때 정수를 반환하므로 예를 들어 99.004는 가격 표시에 이상적이지 않은 99.00 대신 99를 반환합니다.
편집 3- 실제 수익에 대한 toFixed가 여전히 일부 숫자를 망쳐 놓은 것 같습니다.이 최종 편집은 작동하는 것처럼 보입니다. 이런 많은 재 작업!
var discount = roundTo((price / listprice), 2);
function roundTo(n, digits) {
if (digits === undefined) {
digits = 0;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
var test =(Math.round(n) / multiplicator);
return +(test.toFixed(digits));
}
여기에서 Fiddle 예제를 참조하십시오 : https://jsfiddle.net/calder12/3Lbhfy5s/
편집 4- 너희들이 나를 죽이고있다. 반올림을 수행하기 전에 음수를 양수로 바꾸고 결과를 반환하기 전에 되 돌리는 것이 더 쉬운 이유를 파헤 치지 않고 음수에서 Edit 3이 실패합니다.
function roundTo(n, digits) {
var negative = false;
if (digits === undefined) {
digits = 0;
}
if (n < 0) {
negative = true;
n = n * -1;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
n = (Math.round(n) / multiplicator).toFixed(digits);
if (negative) {
n = (n * -1).toFixed(digits);
}
return n;
}
바이올린 : https://jsfiddle.net/3Lbhfy5s/79/
출처 : https://stackoverflow.com/questions/15762768/javascript-math-round-to-two-decimal-places
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
JavaScript에서 문자열의 첫 글자를 대문자로 만드는 방법 (0) | 2021.12.04 |
---|---|
JavaScript 개체의 속성을 얻는 방법 (0) | 2021.12.04 |
CSS 스크롤바 막대 숨기기 (0) | 2021.12.04 |
TDD 용 JavaScript 단위 테스트 도구 (0) | 2021.12.03 |
객체를 반환하는 ECMAScript 6 화살표(=>) 함수 (0) | 2021.12.03 |