Étonnamment, cette fonction n'a pas encore été publiée bien que d'autres en aient des variantes similaires. Il provient des documents Web MDN pour Math.round (). Il est concis et permet une précision variable.
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
console.log (precisionRound (1234.5678, 1)); // sortie attendue: 1234,6
console.log (precisionRound (1234.5678, -1)); // sortie attendue: 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'>
MISE À JOUR: 20 août 2019 Je viens de remarquer cette erreur. Je pense que c'est dû à une erreur de précision en virgule flottante avec Math.round ().
precisionRound(1.005, 2) // produces 1, incorrect, should be 1.01
Ces conditions fonctionnent correctement:
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
Réparer:
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;
}
Cela ajoute juste un chiffre à droite lors de l'arrondi des décimales. MDN a mis à jour la page Math.round afin que quelqu'un puisse peut-être fournir une meilleure solution.
0.1
à un nombre à virgule flottante binaire fini.