2017-05-05 2 views
0

J'ai une fonction php et ayant

phpans = round(53.955,2)

et fonction javascript

var num = 53.955; 
 
var jsans = num.toFixed(2); 
 
console.log(jsans);

les deux jsans et phpans est de donner différents $ phpans = 53,96 et jsans = 53,95. Je ne peux pas comprendre pourquoi cela se produit .. Merci est Advance

+0

Merci @Edwin pour In-prouver ma réponse –

+0

J'ai créé une question de suivi: http://stackoverflow.com/questions/43803587/why-tofixed-in -javascript-agit comme ça. – Edwin

+0

Bonjour @Edwin Merci de créer cette question Je voulais aussi savoir pourquoi toFixed() avoir cette réponse weired –

Répondre

3

Parce que les ordinateurs ne peuvent pas représenter des nombres flottants correctement. C'est probablement 53.95400000000009 ou quelque chose comme ça. La façon de faire est de multiplier par 100, arrondir, puis diviser par 100 afin que l'ordinateur ne traite que des nombres entiers.

var start = 53.955, 
 
     res1, 
 
     res2; 
 
    
 
    res1 = start.toFixed(2); 
 
    res2 = (start * 100).toFixed(0)/100; 
 
    console.log(res1, res2);

//Outputs 
"53.95" 
53.96 
+0

Merci @Styphon Cela fonctionne bien pour moi ... –

0

JAVASCRIPT toFixed: Méthode Le toFixed() convertit un nombre en une chaîne, en gardant un certain nombre de décimales.

php round: Renvoie la valeur arrondie de val à la précision spécifiée (nombre de chiffres après la virgule décimale). la précision peut également être négative ou nulle (par défaut).

Conclusion tofixed ne fonctionne pas comme php tour. precision Spécifie le nombre de chiffres décimaux à arrondir.

fonction Javascript:

function round_up (val, precision) { 
    power = Math.pow (10, precision); 
    poweredVal = Math.ceil (val * power); 
    result = poweredVal/power; 

    return result; 
} 
+0

Ohk @ahmed. Je comprends, mais il donne une valeur erronée dans certains cas particuliers ... Merci pour l'aide ... –

+0

@RajatGupta vérifier mis à jour. sry pour cela –

+0

Merci @ahmed pour ce code ... mais il ne fonctionne pas correctement pour 55.951 si le troisième chiffre est supérieur ou égal à 5 ​​alors il devrait être rond sinon 2 chiffres apparaîtront comme identiques –