88 votes

Comment supprimer "px" de 245px

Quel est le moyen le plus simple de supprimer les deux derniers caractères d'une chaîne de caractères ?

199voto

Don Points 5574

Pour convertir 245px dans 245 juste courir :

parseInt('245px', 10);

Il ne retient que les chiffres de tête et élimine tous les autres.

7 votes

C'est la manière la plus malléable, mais vous devez toujours spécifier le radix parseInt('245px', 10)

0 votes

Vous avez raison : le défaut (étrange) est l'octal lorsque la chaîne commence par '0'... Combien de fois j'ai eu une erreur pour parseInt('09') !

4 votes

Que faites-vous lorsque la valeur est de 35,5px ? L'utilisation de parseInt donnerait 35 seulement.

40voto

Caspar Kleijne Points 11850

Utiliser

var size = parseInt('245px', 10);

où 10 est le radix définir parseInt est analysé dans un décimal valeur

utiliser parseInt mais ne pas utiliser parseInt sans un radix

La fonction parseInt() analyse une chaîne de caractères et renvoie un nombre entier.

La signature est parseInt(string, radix)

Le deuxième argument force parseInt à utiliser un système de numérotation en base dix.

  • Le type d'entrée par défaut de ParseInt() est décimal (base 10).
  • Si le nombre commence par "0", il est supposé être octal (base 8).
  • S'il commence par "0x", il est supposé être hexadécimal.

Pourquoi ? si $(this).attr('num') serait "08" parsInt sans radix deviendrait 0

22voto

Foreever Points 888

Pour convertir une valeur de pixel sans le "px" à la fin, utilisez parseFloat.

parseFloat('245px'); // returns 245      

Remarque : si vous utilisez parseInt, la valeur sera correcte si la valeur est un nombre entier. Si la valeur est une valeur décimale comme 245.50px, alors la valeur sera arrondie à 245.

0 votes

Comme mon édition pour faire une précision a été rejetée, je vais mettre ça en commentaire, parseFloat() ne prend pas de radix comme parseInt() (Voir developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/ & stackoverflow.com/questions/8555649/ )

17voto

Jochem Points 2399

Cela fait exactement ce que vous demandez : supprimer les deux derniers caractères d'une chaîne :

s.substr(0, s.length-2);

5voto

Kyle Shay Points 108

Étonnamment, la méthode de la sous-chaîne s.substr(0, s.length-2); est en fait un peu plus rapide pour supprimer le px (oui, ce n'est pas aussi propre, et s'il y a un espace, il restera ). "250px" -> "250" vs "250 px" -> "250 " ).

Si vous souhaitez prendre en compte les espaces (ce qui est probablement le cas), vous pouvez utiliser la balise .trim() ralentira en fait le substr suffisamment pour que le parseInt la méthode devient en fait supérieure.

Un avantage supplémentaire de l'utilisation de parseInt(s, 10) est que vous obtenez également une conversion de type et que vous pouvez immédiatement commencer à l'appliquer aux fonctions mathématiques.

Au final, tout dépend de ce que vous comptez faire du résultat.

  • S'il s'agit d'un affichage uniquement, alors l'utilisation de la substr méthode sans une coupe serait probablement votre meilleure option.
  • Si vous essayez juste de voir si la valeur sans px est la même qu'une autre valeur s.substr(0, s.length-2) == 0 puis en utilisant le substr serait la meilleure méthode, car "250 " == 250 (même avec l'espace) donnera comme résultat true
  • Si vous voulez tenir compte de la possibilité d'un espace, l'ajouter à une autre valeur, ou calculer quelque chose avec, alors vous pouvez envisager d'utiliser l'option parseInt route.

http://jsperf.com/remove-px-from-coord

Les tests sur jspref tiennent compte d'un espace. J'ai également essayé un s.split('px')[0] y s.replace(/ *px/g, '') qui sont toutes deux plus lentes.

N'hésitez pas à ajouter des cas de test supplémentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X