-1
votes

Comment éviter les valeurs négatives 0 ou -0 en javascript

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)} ?


7 commentaires

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")


3 Réponses :


3
votes

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')}


1 commentaires

Vous l'avez Monsieur. Merci.



0
votes

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 ()


4 commentaires

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.



0
votes

Vous pouvez également faire value = +predictedHours.toFixed(precision) || 0 parce que -0 || 0 est 0


2 commentaires

-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 :)