Jak usunąć „px” z 245px


Odpowiedzi:


182

Aby przekonwertować 245pxw 245, po prostu uruchom:

parseInt('245px', 10);

Zachowuje tylko wiodące liczby, a resztę odrzuca.


7
Jest to najbardziej plastyczny sposób, ale zawsze należy określać podstawęparseInt('245px', 10)
Justin Johnson,

Masz rację: (dziwne) domyślne ustawienie to ósemkowe, gdy ciąg zaczyna się od „0” ... Ile razy otrzymałem błąd dla parseInt('09')!
Don

4
co zrobić, gdy wartość jest taka jak 35,5px..używanie parseInt dałoby tylko 35
Muhammad Umer

5
@MuhammadUmer: możesz użyć 'parseFloat' ( w3schools.com/jsref/jsref_parsefloat.asp )
Don

38

posługiwać się

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

gdzie 10 to podstawa definiująca parseIntto analizowanie do wartości dziesiętnej

użyj parseInt, ale nie używaj parseInt bez podstawy

Funkcja parseInt () analizuje ciąg znaków i zwraca liczbę całkowitą.

Podpis jest parseInt(string, radix)

Drugi argument wymusza na parseInt użycie dziesięciokrotnego systemu numeracji.

  • Domyślnym typem wejścia dla ParseInt () jest liczba dziesiętna (podstawa 10).
  • Jeśli liczba zaczyna się od „0”, zakłada się, że jest ósemkowa (podstawa 8).
  • Jeśli zaczyna się od „0x”, przyjmuje się, że jest szesnastkowy

czemu? gdyby $ (this) .attr ('num') było "08" parsInt bez podstawy stałoby się 0


19

Aby przekonwertować wartość piksela bez „px” na końcu. użyj parseFloat.

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

Uwaga: jeśli używasz parseInt, wartość będzie poprawna, jeśli wartość jest liczbą całkowitą. Jeśli wartość jest liczbą dziesiętną, na przykład 245,50 piks., Zostanie zaokrąglona do 245.


Ponieważ moja edycja wprowadzająca precyzję została odrzucona, umieszczę to w komentarzu, parseFloat()nie przyjmuje radix parseInt()(patrz developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /... & stackoverflow.com/ pytania / 8555649 /… )
Wosk

16

Robi dokładnie to, o co prosisz: usuwa ostatnie dwa znaki łańcucha:

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

5

Co zaskakujące, metoda podciągów s.substr(0, s.length-2);jest w rzeczywistości nieco szybsza w usuwaniu px(tak, nie wygląda tak czysto, a jeśli jest miejsce, pozostanie - "250px" -> "250"vs "250 px" -> "250 ").

Jeśli chcesz wziąć pod uwagę spacje (co prawdopodobnie powinieneś), użycie tej .trim()funkcji w rzeczywistości spowolni substrtest na tyle, że parseIntmetoda faktycznie stanie się lepsza.

Dodatkową zaletą używania parseInt(s, 10)jest to, że uzyskujesz również konwersję typu i możesz natychmiast zacząć stosować ją do funkcji matematycznych.

Ostatecznie to naprawdę zależy od tego, co planujesz zrobić z wynikiem.

  • Jeśli jest to tylko wyświetlanie, najlepszym rozwiązaniem będzie prawdopodobnie użycie substrmetody bez przycinania.
  • Jeśli próbujesz tylko sprawdzić, czy wartość bez px jest taka sama jak inna wartość s.substr(0, s.length-2) == 0, użyj substrmetody, która będzie najlepsza, ponieważ "250 " == 250(nawet ze spacją) datrue
  • Jeśli chcesz uwzględnić możliwość spacji, dodać ją do innej wartości lub obliczyć coś z nią, możesz rozważyć wybranie parseInttrasy.

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

Testy na jspref uwzględniają spację. Spróbowałem też s.split('px')[0]i s.replace(/ *px/g, '')funkcji, oba okazały się wolniejsze.

Zapraszam do dodawania dodatkowych przypadków testowych.


1

Chociaż parseInt () jest dobrą opcją, ale nadal dobrze jest mieć wiele innych rozwiązań

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


0

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

ponieważ nie otacza wejścia.

Ponadto *1służy do przesyłania go do int.


0

substr()jest teraz starszą funkcją ; użyj substring()zamiast tego: (składnia jest taka sama w tym przypadku )

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

Lub użyj slice():

str.slice(0, -2);

slice()wygląda na znacznie czystszą, IMO. Wartości ujemne liczą się od końca.


Jest to jednak mniej wartościowa funkcja, ponieważ nie może być używana do remwartości.
Alan Shortis
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.