web-dev-qa-db-fra.com

Ajouter .00 (toFixed) uniquement si le nombre a moins de deux décimales

Je dois ajouter des zéros pour que chaque nombre ait au moins deux décimales, mais sans arrondir. Donc par exemple:

5      --> 5.00
5.1    --> 5.10
5.11   --> 5.11 (no change)
5.111  --> 5.111 (no change)
5.1111 -->  5.1111  (no change) 

Il manque un IF à ma fonction pour rechercher moins de deux décimales:

function addZeroes( num ) {
   var num = Number(num);
   if ( //idk ) {
      num = num.toFixed(2);
   }
   return num;
}

Merci!

Publier une réponse alternative, en plus des deux ci-dessous. (N'oubliez pas que je ne suis pas un expert et que cela ne concerne que les entrées de texte, pas l'analyse de valeurs complexes telles que les couleurs pouvant avoir des problèmes de virgule flottante, etc.)

function addZeroes( value ) {
    //set everything to at least two decimals; removs 3+ zero decimasl, keep non-zero decimals
    var new_value = value*1; //removes trailing zeros
    new_value = new_value+''; //casts it to string

    pos = new_value.indexOf('.');
    if (pos==-1) new_value = new_value + '.00';
    else {
        var integer = new_value.substring(0,pos);
        var decimals = new_value.substring(pos+1);
        while(decimals.length<2) decimals=decimals+'0';
        new_value = integer+'.'+decimals;
    }
    return new_value;
}

[Ce n'est pas une question en double. La question que vous avez liée suppose "de savoir qu’ils ont au moins 1 décimale". Les points décimaux ne peuvent pas être utilisés dans les entrées de texte, ce qui entraînait des erreurs.]

16

Voici:

function addZeroes(num) {
// Convert input string to a number and store as a variable.
    var value = Number(num);      
// Split the input string into two arrays containing integers/decimals
    var res = num.split(".");     
// If there is no decimal point or only one decimal place found.
    if(res.length == 1 || res[1].length < 3) { 
// Set the number to two decimal places
        value = value.toFixed(2);
    }
// Return updated or original number.
return value;
}

// If you require the number as a string simply cast back as so
var num = String(value);

Voir le violon mis à jour pour la démonstration.

http://jsfiddle.net/jhKuk/159/

25
Frugras

Le code ci-dessous fournit un moyen de faire ce que vous voulez. Il y en a d'autres.

function addZeroes( num ) {
   // Cast as number
   var num = Number(num);
   // If not a number, return 0
   if (isNaN) {
        return 0;
   }
   // If there is no decimal, or the decimal is less than 2 digits, toFixed
   if (String(num).split(".").length < 2 || String(num).split(".")[1].length<=2 ){
       num = num.toFixed(2);
   }
   // Return the number
   return num;
}

http://jsfiddle.net/nzK4n/

alert(addZeroes(5)); // Alerts 5.00
alert(addZeroes(5.1)); // Alerts 5.10
alert(addZeroes(5.11)); // Alerts 5.11
alert(addZeroes(5.111)); // Alerts 5.111
11
cale_b

Utilisez peut-être .toLocaleString() :

var num = 5.1;    
var numWithZeroes = num.toLocaleString("en",{useGrouping: false,minimumFractionDigits: 2});
console.log(numWithZeroes);

En fonction/démo:

function addZeroes(num) {
   return num.toLocaleString("en", {useGrouping: false, minimumFractionDigits: 2})
}

console.log('before   after       correct');
console.log('5      ->', addZeroes(5) , '  --> 5.00');
console.log('5.1    ->', addZeroes(5.1) , '  --> 5.10');
console.log('5.11   ->', addZeroes(5.11) , '  --> 5.11 (no change)');
console.log('5.111  ->', addZeroes(5.111) , ' --> 5.111 (no change)');
console.log('5.1111 ->', addZeroes(5.1111) , '--> 5.1111 (no change)');
console.log('-5     ->', addZeroes(-5) , ' --> -5.00');

Et si vous devez utiliser .toFixed(), voici un one-liner:

var num = 5.1;    
var numWithZeroes = num.toFixed(Math.max(((num+'').split(".")[1]||"").length, 2));
console.log(numWithZeroes);

Ou encore, comme fonction/démo:

function addZeroes(num) {
   return num.toFixed(Math.max(((num+'').split(".")[1]||"").length, 2));
}

console.log('before   after       correct');
console.log('5      ->', addZeroes(5) , '  --> 5.00');
console.log('5.1    ->', addZeroes(5.1) , '  --> 5.10');
console.log('5.11   ->', addZeroes(5.11) , '  --> 5.11 (no change)');
console.log('5.111  ->', addZeroes(5.111) , ' --> 5.111 (no change)');
console.log('5.1111 ->', addZeroes(5.1111) , '--> 5.1111 (no change)');
console.log('-5     ->', addZeroes(-5) , ' --> -5.00');

2
acdcjunior

Voici une fonction qui fera cela, la fonction attend un nombre

var addZeroes = function(num) {
  var numberAsString = num.toString();

  if(numberAsString.indexOf('.') === -1) {
    num = num.toFixed(2);
    numberAsString = num.toString();
  } else if (numberAsString.split(".")[1].length < 3) {
    num = num.toFixed(2);
    numberAsString = num.toString();
  }

  return numberAsString
};
0
Paul T