Les mathématiques.round(num) vs num.toFixed(0) et le navigateur incohérences

Considérons le code suivant:

for (var i=0;i<3;i++){
   var num = i + 0.50;
   var output = num + " " + Math.round(num) + " " + num.toFixed(0);
   alert(output);
}

Dans Opera 9.63-je obtenir:

0.5 1 0

1.5 2 2

2.5 3 2

Dans FF 3.03-je obtenir:

0.5 1 1

1.5 2 2

2.5 3 3

Dans IE 7 j'obtiens:

0.5 1 0

1.5 2 2

2.5 3 3

Note le gras des résultats. Pourquoi sont-ce les incohérences présentes? Est-ce à dire que toFixed(0) doit être évitée? Quel est le bon moyen pour arrondir un nombre à l'entier le plus proche?

  • FWIW IE6 de sortie est identique à votre IE7 et FF2(.0.0.20) est identique à votre FF3, windows.
  • Semble être fixé à l'Opéra de 10 maintenant.
  • Commencez avec "i = -3" dans la boucle for, et ça devient de pire! Il y a beaucoup de mauvaises normes concernant l'arrondissement. Pour nous, les programmeurs de la meilleure mise en œuvre est arrondissement ".5" en vue de la prochaine même nombre (banquiers arrondissement), le pire est arrondissement ".5", ce qui est la norme de la "en Mathématiques.rond" et comme aujourd'hui, IE, Chrome et Opéra de la suivre. Quel est le problème avec elle? Regardez ceci: "(round(x*-1) + round(x))" n'entraîne pas nécessairement 0 plus. "num.toFixed" de tous ces navigateurs effectuer commerciale de l'arrondissement loin de 0 ce qui est correct pour les programmeurs et plus compréhensible pour les clients.
InformationsquelleAutor eft | 2009-02-19