Come concatenare due numeri in javascript?


107

Vorrei qualcosa di simile 5 + 6al ritorno "56"invece di 11.


3
Beh, hai sicuramente molte risposte. Voto a favore di tutti quelli corretti.
David

molte delle risposte hanno la stringa vuota nel mezzo. Sembra strano e mi chiedevo perché sarebbe preferibile a chiunque. Avere le virgolette all'inizio indica rapidamente le intenzioni e sembra avere più senso in quanto non richiede ulteriori riflessioni nel caso di dover concatenare più di due numeri. Suppongo che gli elettori siano d'accordo, ma mi chiedo solo se ci sia qualche ragione storica o di altro tipo dietro la logica di mezzo.
MrBoJangles

Risposte:


152

Usa "" + 5 + 6per forzare le stringhe. Funziona anche con variabili numeriche:

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


Ok quindi, supponendo i valori 5 e 6 sono in due variabili: var1 = 5; var2 = 6; funzionerà ancora
Heidi

3
Questa risposta dovrebbe essere modificata, sicuramente questo è un approccio migliore. const numbersAsString = `${5}${6}`;
Pavol Travnik


26

È ora possibile utilizzare i letterali modello ES6 .

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

Oppure, se hai variabili:

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

console.log(numbersAsString); // Outputs 56

Personalmente trovo la nuova sintassi molto più chiara, anche se leggermente più prolissa.






11

So che questo è un vecchio post e ha ricevuto risposta molte volte. Anch'io mi chiedevo se JavaScript avesse una funzione in grado di farlo. Stavo facendo un po 'di programmazione matematica e avevo bisogno di concatenare due numeri.

Quindi cosa succederebbe se avessi bisogno di combinare due numeri 17 e 29. Certo che posso trasformarli in stringhe e concatenarli, quindi trasformare la nuova stringa in un numero. Sembra funzionare abbastanza bene e posso continuare con il mio codice, ma diamo un'occhiata qui e proviamo a capire cosa sta realmente accadendo qui.

Cosa stiamo facendo a questi due numeri, come prendiamo 17 e 29 e li trasformiamo in millesettecentoventinove? Bene, possiamo moltiplicare 17 per 100, quindi aggiungere 29. E che ne dici di 172 e 293 per ottenere centosettantaduemiladuecentonovantatre? Moltiplicare 172 per 1000 e aggiungere 293. Ma che dire solo di 2 e 9? Moltiplica 2 per 10, quindi aggiungi 9 per ottenere 29.

Quindi spero che a questo punto uno schema dovrebbe esserti chiaro. Possiamo escogitare una formula matematica per fare questo calcolo al posto nostro, invece di usare solo stringhe. Per concatenare due numeri qualsiasi, aeb, dobbiamo prendere il prodotto di a e 10 alla potenza della lunghezza b, quindi aggiungere b.

Allora come otteniamo la lunghezza del numero b? Bene, potremmo trasformare b in una stringa e ottenere la sua proprietà length.

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

Ma ci deve essere un modo migliore per farlo senza stringhe, giusto? Si C'è.

inserisci qui la descrizione dell'immagine

Per due numeri qualsiasi, aeb, con qualsiasi base B. Moltiplicheremo a per base B per la potenza della lunghezza b (usando la base logaritmica di b quindi pavimentandola per ottenere il numero intero più vicino e aggiungendo 1 ad esso) quindi aggiungendo b.

Quindi ora il nostro codice ha questo aspetto:

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

Ma aspetta, e se volessi farlo in base 2 o in base 8? Come lo posso fare? Non possiamo usare la nostra formula che abbiamo appena creato con qualsiasi altra base tranne la base 10. L'oggetto JavaScript Math ha già funzioni incorporate per la base 10 e 2 (solo Math.log), ma come otteniamo le funzioni di log per qualsiasi altra base? Dividiamo il logaritmo di b per il logaritmo di base.Math.log(b) / Math.log(base).

Quindi ora abbiamo il nostro codice matematico completamente funzionante per concatenare due numeri:

    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

Se sapevi che avresti fatto solo calcoli in base 10, potresti aggiungere un controllo per la base non è definita, quindi impostare base = 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

Per semplificarmi, ho usato il prototipo per aggiungere la funzione all'oggetto Numero:

    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

Puoi anche usare la toStringfunzione per convertirlo in stringa e concatenare.

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

4

Un'altra possibilità potrebbe essere questa:

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

Sono tornato a un numero come questo ..

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

uscita 1245

-- modificare --

spiacente,

per il mio uso questo ancora non ha funzionato per me dopo il test. Ho dovuto aggiungere nuovamente lo zero mancante poiché veniva rimosso su numeri inferiori a 10, il mio uso è per far funzionare il codice in determinati momenti Potrebbe non essere corretto ma sembra funzionare (finora).

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;

}

Il voto negativo è stato bello grazie :)

Sono nuovo in questo e vengo qui per imparare da voi una spiegazione del perché sarebbe stato carino.

Ad ogni modo ho aggiornato il mio codice per mostrare come ho risolto il mio problema poiché questo post mi ha aiutato a capirlo.


0

Preferirei il concatmodo:

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

Puoi anche usare un array che può aiutare in alcuni casi d'uso:

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

0

Puoi restituire un numero usando questo trucco:
sconsigliato

[a] + b - 0

Esempio :

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

0

Per aggiungere a tutte le risposte sopra, voglio che condivida la logica di sfondo:

Plus è un operatore di addizione utilizzato anche per la concatenazione di stringhe. Quando vogliamo concatenare i numeri. Dovrebbe essere chiaro che vogliamo concatenare le stringhe, poiché la concatenazione di numeri non mi rende validi casi d'uso.

Possiamo ottenerlo in molti modi,

Attraverso la conversione del tipo

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

Funzionerà anche con la conversione del tipo in background,

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

Se sei determinato a concatenare due stringhe e il tipo di output dovrebbe essere int, parseInt () funziona qui

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