Question

Je dois arrondir les nombres décimaux à six endroits à l'aide de JavaScript, mais je dois aussi prendre en compte les navigateurs existants. Je peut ne comptez pas sur Number.toFixed

  

Le gros problème avec toExponential, toFixed et toPrecision est qu’il s’agit de constructions assez modernes qui ne sont pas prises en charge dans Mozilla jusqu’à Firefox version 1.5 (bien que IE prenne en charge les méthodes depuis la version 5.5). Bien que ces méthodes soient la plupart du temps sûres, les anciens navigateurs SERONT brisés. Par conséquent, si vous écrivez un programme public, il est recommandé de fournir vos propres prototypes afin de fournir des fonctionnalités à ces méthodes pour les anciens navigateurs.

J'envisage d'utiliser quelque chose comme

Math.round(N*1000000)/1000000

Quelle est la meilleure méthode pour fournir ce prototype à des navigateurs plus anciens?

Était-ce utile?

La solution

Essayez ceci:

if (!Number.prototype.toFixed)

    Number.prototype.toFixed = function(precision) {
        var power = Math.pow(10, precision || 0);
        return String(Math.round(this * power)/power);
    }

Autres conseils

Je pense que Firefox 1.5 et IE 5 ne sont quasiment plus utilisés, ou par une très petite quantité de personnes.
C’est un peu comme coder pour supporter Netscape Navigator ... :-)
À moins qu'un autre navigateur principal (Opera? Safari? Improbable ...) ne le supporte pas, ou si vos journaux Web indiquent que le navigateur utilisé est très ancien, vous pouvez probablement utiliser ces méthodes.
Parfois, nous devons passer à autre chose. ^ _ ^

[EDIT] fonctionne bien sur Opera 9.50 et Safari 3.1

javascript: var num = 3.1415926535897932384; alert(num.toFixed(7));

L'article que vous avez mentionné est celui qui a été publié il y a un an et demi, une éternité dans l'industrie informatique ... Je pense que, contrairement aux utilisateurs d'IE, les utilisateurs de Firefox utilisent souvent la dernière version.

De site Web Bytes , cette fonction est presque le même que celui de Serge llinsky:

if (!num.toFixed) 
{
  Number.prototype.toFixed = function(precision) 
  {
     var num = (Math.round(this*Math.pow(10,precision))).toString();
     return num.substring(0,num.length-precision) + "." + 
            num.substring(num.length-precision, num.length);
  }
}

Une autre option est (qui ne convertit pas inutilement une chaîne, mais corrige également le mauvais calcul de (162.295) .toFixed (2) à 162.29 (devrait être 162.30)).

Number.prototype._toFixed=Number.prototype.toFixed; //Preserves the current function
Number.prototype.toFixed=function(precision){
/* step 1 */ var a=this, pre=Math.pow(10,precision||0);
/* step 2 */ a*=pre; //currently number is 162295.499999
/* step 3 */ a = a._toFixed(2); //sets 2 more digits of precision creating 16230.00
/* step 4 */ a = Math.round(a);
/* step 5 */ a/=pre;
/* step 6 */ return a._toFixed(precision);
}
/*This last step corrects the number of digits from 162.3 ( which is what we get in
step 5 to the corrected 162.30. Without it we would get 162.3 */

Éditer: lors de l’essai de cette incarnation spécifique, this * = Math.pow (10, precision || 0) crée une erreur d’attribution non valide de gauche. Donc, donnez au mot-clé this la variable a . Cela aiderait aussi si je fermais mes fonctions ^ _ ^ ;;

Essayez ceci:

 Number.prototype.toFixed = function(precision) {
     var power = Math.pow(10, precision || 0);
     return String(Math.round(this * power)/power);
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top