Jak połączyć dwie liczby w javascript?


107

Chciałbym, 5 + 6żeby "56"zamiast tego coś chciałem wrócić 11.


3
Cóż, z pewnością masz wiele odpowiedzi. Głosuję na wszystkie prawidłowe.
David,

kilka odpowiedzi ma pusty ciąg w środku. Wydaje się dziwne i zastanawiałem się, dlaczego byłoby to lepsze dla kogokolwiek. Umieszczenie cudzysłowów na początku szybko wskazuje intencje i wydaje się mieć większy sens, ponieważ nie wymaga dodatkowego myślenia w przypadku konieczności łączenia więcej niż dwóch liczb. Przypuszczam, że wyborcy się z tym zgadzają, ale po prostu zastanawiam się, czy za tym pośrednim uzasadnieniem kryje się jakiś historyczny lub inny powód.
MrBoJangles

Odpowiedzi:


152

Użyj, "" + 5 + 6aby zmusić go do strun. Działa to również ze zmiennymi numerycznymi:

var a = 5;
var b = 6;
console.log("" + a + b);


Okej, zakładając, że wartości 5 i 6 znajdują się w dwóch zmiennych: var1 = 5; var2 = 6; czy to nadal będzie działać
Heidi

3
Ta odpowiedź powinna zostać zredagowana, zdecydowanie jest to lepsze podejście. const numbersAsString = `${5}${6}`;
Pavol Travnik


26

Możesz teraz korzystać z literałów szablonów ES6 .

const numbersAsString = `${5}${6}`;
console.log(numbersAsString); // Outputs 56

Lub, jeśli masz zmienne:

const someNumber = 5;
const someOtherNumber = 6;
const numbersAsString = `${someNumber}${someOtherNumber}`;

console.log(numbersAsString); // Outputs 56

Osobiście uważam, że nowa składnia jest znacznie jaśniejsza, choć nieco bardziej szczegółowa.






11

Wiem, że to stary post, na który odpowiedziano wiele razy. Ja też się zastanawiałem, czy JavaScript ma funkcję, która by to zrobiła. Zajmowałem się programowaniem matematycznym i musiałem połączyć dwie liczby.

A co by było, gdybym musiał połączyć dwie liczby 17 i 29. Jasne, że mogę zamienić je w łańcuchy i połączyć je, a następnie zamienić nowy ciąg z powrotem w liczbę. Wygląda na to, że działa całkiem nieźle i mogę kontynuować kod, ale spójrzmy tutaj i spróbujmy dowiedzieć się, co tak naprawdę się tutaj dzieje.

Co robimy z tymi dwoma liczbami, jak weźmiemy 17 i 29 i zamienimy je na tysiąc siedemset dwadzieścia dziewięć? Cóż, możemy pomnożyć 17 przez 100, a następnie dodać 29. A co z 172 i 293, aby otrzymać sto siedemdziesiąt dwa tysiące dwieście dziewięćdziesiąt trzy? Pomnóż 172 przez 1000 i dodaj 293. Ale co z tylko 2 i 9? Pomnóż 2 przez 10, a następnie dodaj 9, aby otrzymać 29.

Miejmy więc nadzieję, że do tej pory wzór powinien być dla ciebie widoczny. Możemy opracować formułę matematyczną, aby wykonać to obliczenie za nas, a nie tylko przy użyciu ciągów znaków. Aby połączyć dowolne dwie liczby, a i b, musimy dodać iloczyn a i 10 do potęgi długości b, a następnie dodać b.

Jak więc obliczyć długość liczby b? Cóż, moglibyśmy zamienić b w ciąg i uzyskać jego właściwość length.

    a * Math.pow(10, new String(b).length) + b;

Ale musi być lepszy sposób na zrobienie tego bez strun, prawda? Tak jest.

wprowadź opis obrazu tutaj

Dla dowolnych dwóch liczb, a i b, z dowolną podstawą B.Mnożymy a przez podstawę B do potęgi długości b (używając logarytmu o podstawie b, a następnie układając go w podłogę, aby uzyskać najbliższą liczbę całkowitą, a następnie dodać 1 do niej) następnie dodanie b.

Więc teraz nasz kod wygląda następująco:

    a * Math.pow(10, Math.floor(Math.log10(b)) + 1) + b;

Ale czekaj, a co jeśli chciałbym to zrobić na podstawie 2 lub podstawy 8? Jak mogę to zrobić? Nie możemy użyć naszej formuły, którą właśnie utworzyliśmy, z inną bazą niż podstawową 10. Obiekt JavaScript Math ma już wbudowane funkcje dla podstawy 10 i 2 (tylko Math.log), ale jak możemy uzyskać funkcje dziennika dla dowolnego inna baza? Dzielimy logarytm b przez logarytm podstawy.Math.log(b) / Math.log(base).

Więc teraz mamy nasz w pełni działający kod matematyczny do łączenia dwóch liczb:

    function concatenate(a, b, base) {
        return a * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    }
    var a = 17, var b = 29;
    var concatenatedNumber = concatenate(a, b, 10);
    // concatenatedNumber = 1729

Jeśli wiesz, że będziesz wykonywać obliczenia matematyczne tylko przy podstawie 10, możesz dodać sprawdzenie, czy podstawa jest niezdefiniowana, a następnie ustawić podstawę = 10:

    function concatenate(a, b, base) {
        if(typeof base == 'undefined') {
            base = 10;
        }
        return a * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    }

    var a = 17, b = 29;
    var newNumber = concatenate(a, b); // notice I did not use the base argument
    // newNumber = 1729

Aby mi to ułatwić, użyłem prototypu, aby dodać funkcję do obiektu Number:

    Number.prototype.concatenate = function(b, base) {
        if(typeof base == 'undefined') {
                base = 10;
        }
        return this * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    };
    var a = 17;
    var newNumber = a.concatenate(29);
    // newNumber = 1729

8

Możesz także użyć toStringfunkcji, aby przekonwertować ją na łańcuch i połączyć.

var a = 5;
var b = 6;
var value = a.toString() + b.toString();

4

Inną możliwością może być:

var concat = String(5) + String(6);

2
enter code here
var a = 9821099923;
var b = 91;
alert ("" + b + a); 
// after concating , result is 919821099923 but its is now converted 
into string  

console.log(Number.isInteger("" + b + a))  // false

 you have to do something like below:- 

var c= parseInt("" + b + a)
console.log(c); // 919821099923
console.log(Number.isInteger(c)) // true


1

Przekonwertowałem z powrotem na taką liczbę ...

const timeNow = '' + 12 + 45;
const openTime = parseInt(timeNow, 10);

wyjście 1245

-- edytować --

Przepraszam,

dla mojego użytku to nadal nie działa dla mnie po testach. Musiałem dodać brakujące zero z powrotem, ponieważ było usuwane na liczbach mniejszych niż 10, używam go do uruchamiania kodu w określonych momentach Może nie być poprawne, ale wydaje się działać (do tej pory).

h = new Date().getHours();
m = new Date().getMinutes();
isOpen: boolean;

timeNow = (this.m < 10) ? '' + this.h + 0 + this.m : '' + this.h + this.m;

openTime = parseInt(this.timeNow);


closed() {

(this.openTime >= 1450 && this.openTime <= 1830) ? this.isOpen = true : 
this.isOpen = false;
(this.openTime >= 715 && this.openTime <= 915) ? this.isOpen = true : 
this.isOpen = false;

}

Głosowanie nie było miłe, dziękuję :)

Jestem w tym nowy i przyjechałem tutaj, aby nauczyć się od was wyjaśnienia, dlaczego byłoby miło.

W każdym razie zaktualizowałem mój kod, aby pokazać, jak naprawiłem mój problem, ponieważ ten post pomógł mi go rozgryźć.


0

Wolałbym concatsposób:

const numVar1 = 5;
const numVar2 = 6;
const value = "".concat(numVar1, numVar2);
// or directly with values
const value2 = "".concat(5, 6);

Możesz także użyć tablicy, która może pomóc w niektórych przypadkach:

const value3 = [5, 6, numVar1].join('');

0

Możesz zwrócić liczbę , używając tej sztuczki:
niezalecane

[a] + b - 0

Przykład:

let output = [5] + 6 - 0;
console.log(output); // 56
console.log(typeof output); // number

0

Aby dodać do wszystkich powyższych odpowiedzi, chcę udostępnić logikę tła:

Plus to operator dodawania, który jest również używany do łączenia ciągów. Kiedy chcemy połączyć liczby. Powinno być zrozumienie, że chcemy konkatenować łańcuchy, ponieważ konkatenacja liczb nie daje mi poprawnych przypadków użycia.

Możemy to osiągnąć na wiele sposobów,

Poprzez konwersję typów

let a = 5;
a.toString()+5 // Output 55 type "string"

To również zadziała i przeprowadzi konwersję typów w tle,

5 +""+ 5 // Output 55 type "string"

Jeśli jesteś zdecydowany połączyć dwa łańcuchy i typ wyjścia powinien być int, parseInt () działa tutaj

parseInt(5 +""+ 5)  //Output 55 Type "number"
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.