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'
};
4 Réponses :
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" }
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
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/
Pour obtenir le résultat attendu, utilisez l'objet in to llop
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
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)