Come eliminare "px" da 245px


Risposte:


186

Per convertire 245pxin 245 basta eseguire:

parseInt('245px', 10);

Conserva solo i numeri iniziali e scarta tutto il resto.


7
Questo è il modo più malleabile, ma dovresti sempre specificare la radiceparseInt('245px', 10)
Justin Johnson

Hai ragione: il (strano) predefinito è ottale quando la stringa inizia con '0' ... Quante volte ho ricevuto un errore per parseInt('09')!
Don

4
cosa fai quando il valore è come 35.5px .. usando parseInt si otterrebbe solo 35
Muhammad Umer

5
@MuhammadUmer: puoi usare 'parseFloat' ( w3schools.com/jsref/jsref_parsefloat.asp )
Don

38

uso

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

dove 10 è la radice che definisce parseIntsta analizzando un valore decimale

usa parseInt ma non usare parseInt senza una radice

La funzione parseInt () analizza una stringa e restituisce un numero intero.

La firma è parseInt(string, radix)

Il secondo argomento forza parseInt a utilizzare un sistema di numerazione in base dieci.

  • Il tipo di input predefinito per ParseInt () è decimale (base 10).
  • Se il numero inizia con "0", si presume che sia ottale (base 8).
  • Se inizia con "0x", si presume che sia esadecimale

perché? se $ (this) .attr ('num') fosse "08", parsInt senza radice diventerebbe 0


19

Per convertire un valore di pixel senza il "px" alla fine. utilizzare parseFloat.

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

Nota: se si utilizza parseInt, il valore sarà corretto se il valore è un numero intero. Se il valore è un decimale come 245,50 px, il valore verrà arrotondato a 245.


Dato che la mia modifica per fare una precisione è stata rifiutata, la metterò in commento, parseFloat()non accetta radix come parseInt()(Vedi developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… & stackoverflow.com/ domande / 8555649 /… )
Cera

17

Questo fa esattamente quello che chiedi: rimuovi gli ultimi due caratteri di una stringa:

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

5

Sorprendentemente, il metodo della sottostringa s.substr(0, s.length-2);è in realtà un po 'più veloce per rimuovere il px(sì, non è così pulito, e se c'è uno spazio rimarrà - "250px" -> "250"vs"250 px" -> "250 " ).

Se vuoi tenere conto degli spazi (cosa che probabilmente dovresti), l'uso della .trim()funzione rallenterà effettivamente il substrtest abbastanza da rendere il parseIntmetodo effettivamente superiore.

Un ulteriore vantaggio dell'utilizzo parseInt(s, 10)è che si ottiene anche una conversione del tipo e si può immediatamente iniziare ad applicarla alle funzioni matematiche.

Quindi, alla fine, dipende davvero da cosa pensi di fare con il risultato.

  • Se si tratta di solo visualizzazione, l'utilizzo del substrmetodo senza trim sarebbe probabilmente la soluzione migliore.
  • Se stai solo cercando di vedere se il valore senza px è uguale a un altro valore s.substr(0, s.length-2) == 0, allora substrsarebbe meglio usare il metodo, poiché "250 " == 250(anche con lo spazio) risulterà cometrue
  • Se vuoi tenere conto della possibilità di uno spazio, aggiungerlo a un altro valore o calcolare qualcosa con esso, potresti prendere in considerazione l'idea di seguire il parseIntpercorso.

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

I test su jspref tengono conto di uno spazio. Ho anche provato una funzione s.split('px')[0]e s.replace(/ *px/g, ''), entrambe risultate più lente.

Sentiti libero di aggiungere altri casi di test.


1

Sebbene parseInt () sia una buona opzione, è comunque utile avere molte altre soluzioni

var pixels = '245px';
Number(pixels.replace('px', ''));


0

Preferisco: "245px".replace(/px/,'')*1

poiché non circonda l'ingresso.

Inoltre, *1è per lanciarlo a int.


0

substr()è ora una funzionalità legacy ; usa substring()invece: (la sintassi è la stessa in questo caso )

str.substring(0, str.length-2);

Oppure usa slice():

str.slice(0, -2);

slice()sembra molto più pulito, IMO. I valori negativi contano a ritroso dalla fine.


Tuttavia, rende una funzione meno preziosa, poiché non può essere utilizzata per i remvalori.
Alan Shortis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.