JavaScriptで2つの数値を連結する方法は?


107

の代わり5 + 6に帰りたいようなものをお願いし"56"ます11


3
まあ、あなたは確かに多くの答えを得ました。私は正しいものすべてに投票しています。
デビッド

いくつかの回答の中央には空の文字列があります。奇妙に思え、なぜそれが誰にとっても好ましいのかと思っていました。最初に引用符があると意図がすぐにわかり、3つ以上の数値を連結する必要がある場合に追加の考慮が必要ないため、より理にかなっているようです。私は有権者が同意したと思いますが、中間の理論的根拠の背後に歴史的または他の理由があるかどうか疑問に思っています。
MrBoJangles 2016年

回答:


152

"" + 5 + 6文字列に強制的に使用します。これは数値変数でも機能します。

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


では、値5と6が2つの変数にあると仮定します。var1= 5; var2 = 6; それはまだ機能しますか
ハイジは

3
この回答は編集する必要があります。間違いなく、これはより良いアプローチです。 const numbersAsString = `${5}${6}`;
Pavol Travnik


26

ES6テンプレートリテラルを使用できるようになりました。

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

または、変数がある場合:

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

console.log(numbersAsString); // Outputs 56

個人的には、少し冗長ではありますが、新しい構文はより明確になっています。






11

これは古い投稿で、何度も回答されています。私もJavaScriptにこれを行う関数があるのか​​と思っていました。私はいくつかの数学プログラミングを行っていて、2つの数値を連結する必要がありました。

つまり、2つの数値17と29を組み合わせる必要がある場合はどうでしょう。確かに、それらを文字列に変換して連結し、新しい文字列を数値に戻すことができます。それはかなりうまくいくようで、コードを続けることができますが、ここを見て、ここで実際に何が起こっているのかを理解してみましょう。

これらの2つの数値に対して私たちは何をしているのですか、17と29を取り、それを1千279に変換するにはどうすればよいでしょうか。さて、17に100を掛けて29を加えることができます。さらに、172と293で172万293を取得するにはどうすればよいでしょうか。172に1000を掛けて293を加えます。しかし、2と9だけはどうですか?2に10を掛けてから9を加えると29になります。

うまくいけば、今ではパターンが明らかになっているはずです。文字列を使用するだけでなく、この計算を行うための数式を考案することができます。aとbの2つの数値を連結するには、aと10の積を長さbの累乗にしてから、bを追加する必要があります。

では、数値bの長さをどのように取得するのでしょうか。そうですね、bを文字列に変換して、そのlengthプロパティを取得できます。

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

しかし、文字列なしでこれを行うためのより良い方法が必要ですよね?はいあります。

ここに画像の説明を入力してください

任意の2つの数値aとb、任意の底Bを使用します。aに底Bを長さbの累乗で乗算します(bの対数底を使用し、次にそれをフローリングして最も近い整数を取得し、それに1を加えます)。次にbを追加します。

したがって、コードは次のようになります。

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

しかし、ちょっと待って、これをベース2またはベース8で実行したい場合はどうなりますか?どうやってやるの?ベース10以外の他のベースで作成した式は使用できません。JavaScriptMathオブジェクトには、ベース10および2(Math.logのみ)の組み込み関数がすでにありますが、どのようにログ関数を取得するのですか?他の拠点?bの対数をbaseの対数で割ります。Math.log(b) / Math.log(base).

これで、2つの数値を連結するための完全に機能する数学ベースのコードができました。

    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

ベース10の計算のみを実行することがわかっている場合は、ベースが未定義かどうかのチェックを追加して、ベース= 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

わかりやすくするために、プロトタイプを使用して関数を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


4

別の可能性はこれである可能性があります:

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

このような数値に戻しました。

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

出力1245

-編集-

ごめんなさい、

私の用途では、これはテスト後にまだ機能しませんでした。不足しているゼロは、10未満の数値で削除されたため、追加し直さなければなりませんでした。コードを特定の時間に実行させるために使用している場合があります。

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;

}

投票はよろしくお願いします:)

私はこれに不慣れで、皆さんからなぜここが良かったかについての説明を学ぶためにここに来ました。

とにかく、この投稿がそれを理解するのに役立つので、私のコードを更新して問題をどのように修正したかを示しました。


0

私はconcat方法を好みます:

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

いくつかのユースケースで役立つ配列を使用することもできます:

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

0

このトリックを使用して数値を返すことができます:
推奨されません

[a] + b - 0

例:

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

0

上記のすべての回答に追加するには、バックグラウンドロジックを共有する必要があります。

Plusは、文字列の連結にも使用される加算演算子です。数字を連結したいとき。数値の連結は私にとって有効なユースケースではないので、文字列を連結したいということを理解する必要があります。

複数の方法で達成できます

型変換を通じて

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

これも機能し、バックグラウンドで型変換を行います。

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

2つの文字列を連結すると決定され、出力のタイプがintである必要がある場合、parseInt()はここで機能します

parseInt(5 +""+ 5)  //Output 55 Type "number"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.