Comment concaténer deux nombres en javascript?


107

J'aimerais quelque chose comme 5 + 6revenir "56"au lieu de 11.


3
Eh bien, vous avez certainement beaucoup de réponses. Je vote tous les bons.
David

plusieurs des réponses ont la chaîne vide au milieu. Cela semble étrange et je me demandais pourquoi cela serait préférable à quiconque. Avoir les guillemets au début indique rapidement les intentions, et semble avoir plus de sens car cela ne nécessite aucune réflexion supplémentaire dans le cas où il faudrait concaténer plus de deux nombres. Je suppose que les électeurs sont d'accord, mais se demandent simplement s'il y a une raison historique ou autre derrière la logique intermédiaire.
MrBoJangles

Réponses:


152

Utilisez "" + 5 + 6pour le forcer aux chaînes. Cela fonctionne également avec des variables numériques:

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


Ok donc, les valeurs 5 et 6 sont sous-jacentes à deux variables: var1 = 5; var2 = 6; cela fonctionnera-t-il encore
Heidi

3
Cette réponse doit être modifiée, c'est certainement une meilleure approche. const numbersAsString = `${5}${6}`;
Pavol Travnik


26

Vous pouvez maintenant utiliser les littéraux de modèle ES6 .

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

Ou, si vous avez des variables:

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

console.log(numbersAsString); // Outputs 56

Personnellement, je trouve la nouvelle syntaxe beaucoup plus claire, quoique légèrement plus verbeuse.






11

Je sais que c'est un ancien message et il a reçu de nombreuses réponses. Je me demandais moi aussi si JavaScript avait une fonction qui ferait cela. Je faisais de la programmation mathématique et j'avais besoin de concaténer deux nombres.

Alors que faire si j'avais besoin de combiner deux nombres 17 et 29. Bien sûr, je peux les transformer en chaînes et les concaténer, puis transformer la nouvelle chaîne en un nombre. Cela semble fonctionner plutôt bien et je peux continuer avec mon code, mais jetons un coup d'œil ici et essayons de comprendre ce qui se passe vraiment ici.

Que faisons-nous de ces deux nombres, comment pouvons-nous prendre 17 et 29 et le transformer en mille sept cent vingt-neuf? Eh bien, nous pouvons multiplier 17 par 100 puis ajouter 29. Et que diriez-vous de 172 et 293 pour obtenir cent soixante-douze mille deux cent quatre-vingt-treize? Multipliez 172 par 1000 et ajoutez 293. Mais qu'en est-il seulement de 2 et 9? Multipliez 2 par 10 puis ajoutez 9 pour obtenir 29.

J'espère donc qu'à présent, un modèle devrait vous apparaître. Nous pouvons concevoir une formule mathématique pour faire ce calcul à notre place plutôt que d'utiliser simplement des chaînes. Pour concaténer deux nombres quelconques, a et b, nous devons prendre le produit de a et 10 à la puissance de la longueur b puis ajouter b.

Alors, comment obtenir la longueur du nombre b? Eh bien, nous pourrions transformer b en une chaîne et en obtenir la propriété length.

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

Mais il doit y avoir une meilleure façon de faire cela sans cordes, non? Oui il y a.

entrez la description de l'image ici

Pour deux nombres quelconques, a et b, avec n'importe quelle base B.Nous allons multiplier a par la base B à la puissance de la longueur b (en utilisant la base logarithmique de b puis en la recouvrant pour obtenir le nombre entier le plus proche, puis en y ajoutant 1) puis en ajoutant b.

Alors maintenant, notre code ressemble à ceci:

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

Mais attendez, et si je voulais faire cela en base 2 ou en base 8? Comment puis je faire ça? Nous ne pouvons pas utiliser notre formule que nous venons de créer avec une autre base que la base 10. L'objet JavaScript Math a déjà des fonctions intégrées pour la base 10 et 2 (juste Math.log), mais comment obtenir des fonctions de journal pour tout autre base? Nous divisons le log de b par le log de base.Math.log(b) / Math.log(base).

Nous avons donc maintenant notre code basé sur les mathématiques entièrement fonctionnel pour concaténer deux nombres:

    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

Si vous saviez que vous n'alliez faire que des calculs de base 10, vous pouvez ajouter une vérification pour que la base n'est pas définie, puis définir 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

Pour me faciliter la tâche, j'ai utilisé le prototype pour ajouter la fonction à l'objet 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

Vous pouvez également utiliser la toStringfonction pour le convertir en chaîne et concaténer.

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

4

Une autre possibilité pourrait être celle-ci:

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

Je me suis reconverti en nombre comme ça.

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

sortie 1245

-- Éditer --

Désolé,

pour mon utilisation, cela ne fonctionnait toujours pas pour moi après les tests. J'ai dû rajouter le zéro manquant car il était supprimé sur les nombres inférieurs à 10, mon utilisation est de laisser le code s'exécuter à certains moments Peut ne pas être correct, mais cela semble fonctionner (jusqu'à présent).

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;

}

Le vote était gentil merci :)

Je suis nouveau dans ce domaine et je viens ici pour apprendre de vous les gars une explication de pourquoi cela aurait été gentil.

Quoi qu'il en soit, j'ai mis à jour mon code pour montrer comment j'ai résolu mon problème, car ce message m'a aidé à le résoudre.


0

Je préfère le concatchemin:

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

Vous pouvez également utiliser un tableau qui peut vous aider dans certains cas d'utilisation:

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

0

Vous pouvez renvoyer un nombre en utilisant cette astuce:
non recommandé

[a] + b - 0

Exemple :

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

0

Pour ajouter à toutes les réponses ci-dessus, je veux partager la logique d'arrière-plan:

Plus est un opérateur d'addition qui est également utilisé pour la concaténation de chaînes. Lorsque nous voulons concaténer des nombres. Il devrait être entendu que nous voulons concaténer les chaînes, car la concaténation de nombres ne me permet pas de cas d'utilisation valides.

Nous pouvons y parvenir de plusieurs manières,

Par conversion de type

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

Cela fonctionnera également et effectuera la conversion de type en arrière-plan,

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

Si vous êtes déterminé à concaténer deux chaînes et que le type de sortie doit être int, parseInt () fonctionne ici

parseInt(5 +""+ 5)  //Output 55 Type "number"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.