C'est un vieux sujet, mais toujours en tête du classement des résultats de Google et les solutions proposées, de partager le même point flottant décimales question. Voici la (très générique) fonction que j'utilise, grâce à MDN:
function round(value, exp) {
if (typeof exp === 'undefined' || +exp === 0)
return Math.round(value);
value = +value;
exp = +exp;
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0))
return NaN;
// Shift
value = value.toString().split('e');
value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp)));
// Shift back
value = value.toString().split('e');
return +(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp));
}
Comme nous pouvons le voir, nous n'avons pas ces problèmes:
round(1.275, 2); // Returns 1.28
round(1.27499, 2); // Returns 1.27
Cette genericity fournit également des trucs cool:
round(1234.5678, -2); // Returns 1200
round(1.2345678e+2, 2); // Returns 123.46
round("123.45"); // Returns 123
Maintenant, pour répondre à l'OP de la question, il est de type:
round(10.8034, 2).toFixed(2); // Returns "10.80"
round(10.8, 2).toFixed(2); // Returns "10.80"
Ou, pour un plus concis, moins de la fonction générique:
function round2Fixed(value) {
value = +value;
if (isNaN(value))
return NaN;
// Shift
value = value.toString().split('e');
value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + 2) : 2)));
// Shift back
value = value.toString().split('e');
return (+(value[0] + 'e' + (value[1] ? (+value[1] - 2) : -2))).toFixed(2);
}
Vous pouvez appeler avec:
round2Fixed(10.8034); // Returns "10.80"
round2Fixed(10.8); // Returns "10.80"