놀랍게도,이 기능은 다른 기능과 유사하지만 아직 게시되지 않았습니다. Math.round ()에 대한 MDN 웹 문서에서 가져온 것입니다. 간결하고 다양한 정밀도를 허용합니다.
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
console.log (precisionRound (1234.5678, 1)); // 예상 출력 : 1234.6
console.log (precisionRound (1234.5678, -1)); // 예상 출력 : 1230
var inp = document.querySelectorAll('input');
var btn = document.querySelector('button');
btn.onclick = function(){
inp[2].value = precisionRound( parseFloat(inp[0].value) * parseFloat(inp[1].value) , 5 );
};
//MDN function
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
button{
display: block;
}
<input type='text' value='0.1'>
<input type='text' value='0.2'>
<button>Get Product</button>
<input type='text'>
업데이트 : 2019 년 8 월 20 일이 오류가 나타났습니다. Math.round ()의 부동 소수점 정밀도 오류 때문이라고 생각합니다.
precisionRound(1.005, 2) // produces 1, incorrect, should be 1.01
이러한 조건은 올바르게 작동합니다.
precisionRound(0.005, 2) // produces 0.01
precisionRound(1.0005, 3) // produces 1.001
precisionRound(1234.5, 0) // produces 1235
precisionRound(1234.5, -1) // produces 1230
고치다:
function precisionRoundMod(number, precision) {
var factor = Math.pow(10, precision);
var n = precision < 0 ? number : 0.01 / factor + number;
return Math.round( n * factor) / factor;
}
소수 자릿수를 올릴 때 오른쪽에 숫자가 추가됩니다. MDN은 Math.round 페이지를 업데이트하여 더 나은 솔루션을 제공 할 수 있습니다.
0.1
유한 이진 부동 소수점 숫자 에 매핑 할 수있는 방법이 없기 때문입니다 .