J'ai essayé d'utiliser toString()
et l'opérateur au niveau du bit |
mais je voudrais utiliser la précision et la sortie de chaîne. Comme @trincot l'a mentionné, cela est causé par la valeur de précision, par exemple -0,45 se traduira par -0. J'ai le code ici.
typeof predictedHours //number e.g. -0.45 precision = 0 value={predictedHours.toFixed(precision)} typeof value //string e.g. "-0"
Question - Y a-t-il une ligne pour convertir -0 en 0 dans cette ligne - value={predictedHours.toFixed(precision)}
?
3 Réponses :
Je ne connais pas une manière particulièrement propre de le faire, mais il y a toujours:
value={predictedHours.toFixed(precision).replace('-0', '0')}
Vous l'avez Monsieur. Merci.
Je pense que la suggestion de @ trincot est meilleure pour éviter que des décimales telles que -0.48.toFixed(2)
soient converties en positives. Il m'a fallu un certain temps pour comprendre l'expression régulière. Une petite mise en garde cependant: en raison de la priorité des opérateurs, les nombres négatifs restent négatifs avec toFixed lorsqu'ils sont entre crochets. Quelques exemples ici:
-0.001.toFixed(2).replace(/^-0$/, "0") //0 '0' console.log((-0.48).toFixed(0).replace(/^-0$/, '0')); Correct //-0 '0' console.log((-0.48).toFixed(2).replace(/^-0$/, '0')); Correct //-0.48 '-0.48' console.log(-0.48.toFixed(0).replace(/^-0$/, '0')); //0 '0' console.log(-0.48.toFixed(2).replace(/^-0$/, '0')); //-0.48 '-0.48'
Jetez également un œil aux exemples ici - toFixed ()
Vous ne savez pas ce que vous entendez par de vraies décimales, mais essayez avec (-0.0048).toFixed(2)
.
Ouais bon point. Y a-t-il un moyen d'éviter cela en ajoutant des caractères optionnels dans regex?
console.log((-0.0048).toFixed(2).replace(/^-0.?0?/, '0'));
retournerait 00
Je veux dire… j'utiliserais .replace('-0', '0')
, comme on le voit. toFixed
n'est pas localisé et ne produit pas de notation scientifique, il est donc assez sûr.
Vous pouvez également faire value = +predictedHours.toFixed(precision) || 0
parce que -0 || 0
est 0
-0 || 0
ne fonctionnera pas ici, car toFixed
renvoie une chaîne et "-0" !== 0
.
Vous avez raison, j'ai corrigé ma réponse. Ajout d'un +
pour le transformer en numéro :)
Beaucoup de commentaires pertinents dans cette question: stackoverflow.com/questions/7223359/are-0-and-0-the-same
Peut-être que la question est déclenchée par
-0.001.toFixed(2) === "-0"
?@trincot Vous avez raison. il est déclenché exactement à cause de cela et j'ai un élément JSX dans lequel lancer la valeur.
Alors, que voulez-vous que la chaîne soit dans ce cas? Juste "0" au lieu de "-0"?
@trincot Correct!
Downvoters, je suis désolé pour le mauvais langage. Peut-être que je mérite les votes négatifs.
Vous pouvez faire
-0.001.toFixed(2).replace(/^-0$/, "0")