Dzięki mojej bibliotece javascript, kończę z ciągiem, który reprezentuje liczbę. Teraz chcę utworzyć dodatek na tej liczbie, zamiast tego zamiast tego robi on ciągłe połączenie. Rozwiązanie jest łatwe ( How do I add an integer value with javascript (jquery) to a value that's returning a string?, How to make an addition instead of a concatenation), jeśli twój numer jest zawsze liczbą całkowitą. Jednak mój ciąg może być zmiennoprzecinkowy lub liczbą całkowitą, a w momencie dodawania, i nie wiem, który będzie. Czy istnieje sposób, aby upewnić się, że dodawanie odbywa się niezależnie od tego, czy jest to liczba zmiennopozycyjna czy całkowita?Jak zapewnić dodawanie javascript zamiast łączenia ciągów (nie zawsze dodając liczby całkowite)
Odpowiedz
Spróbuj użyć parseFloat
. Zmienne wejściowe zostaną przekonwertowane na zmienne, które będą działać niezależnie od tego, czy łańcuch zawiera liczbę całkowitą czy zmiennoprzecinkową. Twój wynik zawsze będzie zmienny.
Dosyć bezpiecznie jest zawsze używać parseFloat
, nawet jeśli podano liczbę całkowitą. Jeśli musisz użyć odpowiedniej konwersji, możesz match
podać kropkę dziesiętną i użyć odpowiedniej funkcji.
chyba że jest to "NaN" – jcolebrand
Włączyłem twoją myśl do dłuższej wersji mojej odpowiedzi, robię to meczu z tym, co myślisz? – jcolebrand
Tak, coś takiego mam na myśli :) –
Zamierzam założyć, że dodatek pływający jest wystarczający, a jeśli nie jest, to będziesz musiał kopać głębiej.
function alwaysAddAsNumbers(numberOne, numberTwo){
var parseOne = parseFloat(numberOne),
parseTwo = parseFloat(numberTwo);
if (isNaN(parseOne)) parseOne = 0;
if (isNaN(parseTwo)) parseTwo = 0;
return parseOne + parseTwo;
}
Aby wziąć co @Asad powiedział, możesz to zrobić w zamian:
function alwaysAddAsNumbers(a, b){
var m = 0,
n = 0,
d = /\./,
f = parseFloat,
i = parseInt,
t = isNaN,
r = 10;
m = (d.test(a)) ? f(a) : i(a,r);
n = (d.test(b)) ? f(b) : i(b,r);
if (t(m)) m = 0;
if (t(n)) n = 0;
return m + n;
}
będzie to zawsze daje przynajmniej wyjście zerowe i nie powiedzieć, jeśli jeden z nich jest NaN
.
Na pewno lepiej jest zwrócić NaN, jeśli jest NaN? –
Dobrze wiedzieć, ale nie interesuję się NaN. – dnc253
idk, jaka jest specyfikacja? ;-) ... Powinieneś się zająć NaN cos, to cię ugryzie w pierwszej osobie, jaką otrzyma. – jcolebrand
Z jakiegoś powodu .... kto wie ???
Używanie parseFloat działa .... gdy parseInt nie ... oczywiście nie zawsze są takie same.
FWIW .... ja "dodając" elementy danych z "zaznaczone" checkboxes tutaj ...
var AddOns = 0;
$('.broadcast-channels').each(function(){
if ($(this).prop("checked")) {
var thisAddOn = parseFloat($(this).data('channel'));
AddOns = AddOns + thisAddOn;
}
});
- 1. dodając dwa podpisane lub niepodpisane liczby całkowite
- 2. JavaScript innerHTML dodając zamiast zastąpienia
- 3. Rozbij liczby całkowite z przecinkiem na przedziały?
- 4. Jak sortować liczby całkowite alfabetycznie?
- 5. szybki sposób łączenia ciągów w nodeJS/JavaScript
- 6. Konwertuj sekwencję ciągów znaków na liczby całkowite (Clojure)
- 7. Gson. Wyodrębnij liczby całkowite jako liczby całkowite, a nie jako liczby podwójne
- 8. C++ dowolnej długości liczby całkowite
- 9. JavaScript dodając ciąg do numeru
- 10. Próbuję dowiedzieć się, jak konwertować liczby rzymskie na liczby całkowite
- 11. Czy to zawsze zły pomysł, aby użyć + do łączenia ciągów
- 12. Dodając pełne liczby stron w lateksie, jak?
- 13. Jak liczby całkowite mnożą się w C++?
- 14. Wyodrębnij liczby całkowite z zakresów
- 15. JavaScript zsumowanie duże całkowite
- 16. Jak porównać dwie wartości ciągu jako liczby całkowite?
- 17. Konwertowanie numpy string string na liczby całkowite w base-16
- 18. Jak łączenia ciągów sformatowane printf w bash
- 19. Wyświetl liczby całkowite tylko w etykiecie AxisY?
- 20. Etykieta NoUISlider wyświetla tylko liczby całkowite
- 21. Arraylist zawierające liczby całkowite i łańcuchy znaków
- 22. Jak określić duże liczby całkowite w czytelny sposób?
- 23. Jak przekonwertować ujemne liczby całkowite na ciągi w SML ze znakiem minus zamiast tyldy?
- 24. Konwertuj liczby całkowite na ciąg "hh: mm"
- 25. cudaMemset() - czy ustawia bajty lub liczby całkowite?
- 26. Długie liczby całkowite w PHP dla oszczędzania
- 27. C++ konwersja liczb zmiennoprzecinkowych na liczby całkowite
- 28. Kiedy należy wyraźnie podać liczby całkowite?
- 29. Dynamiczne dodawanie ciągów zasobów
- 30. Dlaczego Elm używa operatora "++" do łączenia łańcuchów?
chyba że jest 'NaN' – jcolebrand
nie różni się od' parseInt' .... Więc –
, Martwiłem się, że gdybym użył 'parseFloat()', skończyłbym z "5.0" zamiast "5", ale najwyraźniej tak nie jest? – dnc253