1
votes

Javascript arrondi la valeur décimale dans l'objet

Je suis nouveau dans JavaScript et je suis confronté à un problème d'arrondi du nombre décimal. J'ai un objet avec «n» pas de paires valeur / clé. Les paires de valeurs clés peuvent être des chaînes, des nombres ou des valeurs nulles. Je veux simplement cibler la paire de valeurs-clés numériques et arrondir la valeur numérique avec 2 décimales. Par exemple. Si j'ai la valeur 1,798 , je veux l'arrondir à 1,80 . Je n'ai aucune idée du nombre de paires de valeurs clés présentes dans mon objet, je veux simplement cibler la valeur numérique et la remplacer.

J'ai essayé foreach mais j'ai découvert plus tard que cela fonctionne sur le type de tableau

var obj = {
    name: 'abc',
    term1: 0,
    term2: 1.798,
    term3: 1.9999,
    term4: 0,
    term5: null,
    term6: 'xyz'
};


// Expected output

var obj = {
    name: 'abc',
    term1: 0,
    term2: 1.80,
    term3: 2.00,
    term4: 0,
    term5: null,
    term6: 'xyz'
};


0 commentaires

4 Réponses :


3
votes

Vous pouvez utiliser typeof pour identifier les nombres et .toFixed (n) pour arrondir à n places (et renvoyer sous forme de chaîne, sinon les 0 à la fin sont perdus)

var obj = {
    name: 'abc',
    term1: 0,
    term2: 1.798,
    term3: 1.9999,
    term4: 0,
    term5: null,
    term6: 'xyz',
};
for(propertyName in obj){
    if(typeof obj[propertyName] === 'number'){
        obj[propertyName] = obj[propertyName].toFixed(2);
    }
}
console.log(obj) //  Object { name: "abc", term1: "0.00", term2: "1.80", term3: "2.00", term4: "0.00", term5: null, term6: "xyz" }


2 commentaires

Vous devriez probablement aussi utiliser parseInt () sur le résultat correspondant. La sortie attendue du problème les a formatés sous forme de nombres, mais oui, c'est une solution solide.


Si vous voulez comme nombre après .toFixed () alors cela ressemble à + (12.128.toFixed (2)) qui renvoie 12.13 dans typeof < code> numéro



1
votes

Vous pouvez utiliser Object.keys (obj) pour parcourir les clés et prendre des décisions. Voici une solution de travail pour votre problème:

var obj = {

name: 'abc', term1: 0, term2: 1.798, term3: 1.9999, term4: 0, term5: null, term6: 'xyz'

};

for(var key of Object.keys(obj)) {
    if(typeof obj[key] === 'number' && obj[key] !== 0) {
    obj[key] = (Math.round(obj[key] * 100)) / 100;
  }
}

Fiddle pour travailler: https: / /jsfiddle.net/x4otdeca/


0 commentaires

1
votes

Pour obtenir le résultat attendu, utilisez l'objet in to llop

  1. itérer un objet en utilisant for in
  2. Vérifiez si elle est nulle ou chaîne et utilisez toFixed (2) pour arrondir les valeurs décimales
    var obj = {
      name: 'abc', 
      term1: 0, 
      term2: 1.798, 
      term3: 1.9999, 
      term4: 0, 
      term5: null, 
      term6: 'xyz'
    };
    
    for( let key in obj){
       obj[key] = !obj[key] || isNaN(obj[key])? obj[key] : obj[key].toFixed(2)
    }
    
    console.log(obj)

codepen - https://codepen.io/nagasai/pen / dybNwEW? editors = 1010


0 commentaires

0
votes

Eh bien, vous ne pouvez pas avoir les zéros de fin car les nombres n'ont pas de chiffres significatifs. Vous pouvez en faire une chaîne et cela conserverait les zéros.

var obj = {
    name: 'abc',
    term1: 0,
    term2: 1.798,
    term3: 1.9999,
    term4: 0,
    term5: null,
    term6: 'xyz'
};

Object.entries(obj).forEach(([key, value]) => {
  if(typeof value === 'number') {
    // obj[key] = value.toFixed(2) // 1.9999 -> "2.00"
    obj[key] = +value.toFixed(2) // 1.9999 -> 2
  }
})

console.log(obj)


0 commentaires