J'ai plusieurs cas que j'ai besoin de couvrir tout en divisant les chiffres.
C'est la logique que j'utilise: p> Il fonctionne comme prévu pour le cas suivant: p> Cela fonctionne également pour ce cas: p> mais pour ce cas, cela ne fonctionne pas comme prévu: p> < PRE> XXX PRE> Il semble que je divisez des nombres ronds, la division elle-même supprime les <3 forts> .00 strong> décimales p> S'il y a une solution pour mon Logic, veuillez verser une certaine lumière. Ou s'il y a un meilleur moyen de le couvrir, je suis aussi heureux. P> ps. Les chiffres proviennent de la base de données et sont toujours initialement des chaînes. P> P>
4 Réponses :
Vous pouvez essayer d'ajouter toofixed (2) code> dans la ligne de résultat:
Je n'ai pas besoin d'arrondir.
Si je comprends bien correctement, votre objectif est de renvoyer une chaîne bien formatée comme la sortie de la division, quel que soit le résultat est un nombre rond ou non.
Pourquoi ne pas analyser les 2 chiffres, Faire la division, puis formater la sortie pour s'adapter à Waht dont vous avez besoin? P>
function divideAndReturn (totalPrice, runningTime) { let result; let totalPriceFloat = parseFloat(totalPrice); // no need to format anything right now let runningTimeNumber = parseInt(runningTime, 10); // Always a round number result = totalPriceFloat / runningTimeNumber; // I do not need rounding. Need exact decimals return result.toFixed(2) // returns a string with 2 digits after comma }
Si j'appelle Tofixed (), alors il arrondit. J'aurais besoin de résultats exacts, sans aucun arrondi.
Je ne suis pas sûr de comprendre alors. Voulez-vous garder au moins 2 décimales? Ou voulez-vous garder exactement 2 décimales, mais sans arrondir?
Je veux toujours garder deux décimales sans arrondir.
Qu'en est-il de quelque chose comme retour (math.floor (100 * résultat) / 100) code> alors?
La stratégie recommandée serait de multiplier le nombre avec 100 (si vous avez besoin de 3 chiffres après décimale, puis de 1000, etc.). Convertissez le résultat en entiers, puis divisez par 100.
p>
function divideAndReturn (totalPrice, runningTime) { let result; let totalPriceFloat = parseFloat(totalPrice); // no need to format anything right now let runningTimeNumber = parseInt(runningTime, 10); // Always a round number result = parseInt((totalPriceFloat * 100) / runningTimeNumber); // I do not need rounding. Need exact decimals result /= 100 return result.toFixed(2) // returns a string with 2 digits after comma } console.log(divideAndReturn('1000.00', 6)) console.log(divideAndReturn('100.00', 12)) console.log(divideAndReturn('1000.00', 5))
Utilisez p> TOFIXED code> sur le résultat pour convertir le numéro en chaîne au format requis. Conversion d'un numéro entier en chaîne ne sera jamais rendu et des chiffres après un endroit décimal.
function divideAndReturn (totalPrice, runningTime) {
let totalPriceFloat = parseFloat(totalPrice);
let runningTimeNumber = parseInt(runningTime, 10);
let result = totalPriceFloat / runningTimeNumber;
// without rounding result
let ret = result.toFixed(3)
return ret.substr(0, ret.length-1);
}
console.log(divideAndReturn('1000.00', '6'))
console.log(divideAndReturn('100.00', '12'))
console.log(divideAndReturn('1000.00', '5'))
Le premier calcul est arrondi, que je veux éviter. Il renvoie le 166.67, au lieu de 166,66. Cependant, le dernier est en train d'être démontré correctement.
@vedran s'il vous plaît expliquer ce qui ne va pas avec la réponse afin que je puisse comprendre le problème plutôt que d'éditer la mine
J'ai mis à jour la question avec l'exigence exacte. Merci pour le temps.
Vous arrondiez tout ce qui peut être plus faux que de rassembler
Je suis d'accord, mais ce sont les exigences que je dois suivre.
@Vedranmaricevic fait que la mise à jour répond à vos exigences?
Oui ça l'a fait. J'ai suscité votre réponse. J'ai eu deux réponses possibles, une par multiplication avec 100 et votre réponse. Les deux rendent les mêmes résultats. J'ai opté pour la "multiplication"
Votre variable
totalpricefloat code> est une chaîne et non un nombre.
TOFIXED () CODE> renvoie une chaîne représentant le numéro donné à l'aide de la notation à point fixe.
Vous avez raison. Mais comment pourrais-je avoir «1000.00» à analyser et à devenir 1000.00?
Je ne suis pas sûr de ce que vous entendez par aucun arrondi! En supprimant les chiffres décimaux «traînants», vous arrondiez. S'il vous plaît expliquer pourquoi vous voulez ce comportement.