Як об'єднати два числа в JavaScript?


107

Мені б хотілося, щоб щось замість цього 5 + 6поверталося ."56"11


3
Ну, ви, звичайно, отримали багато відповідей. Я голосую за всі правильні.
Девід

кілька відповідей мають порожню рядок посередині. Здається, дивно, і мені було цікаво, чому це було б кращим для когось. Наявність лапок на початку швидко вказує на наміри, і, здається, має більше сенсу, оскільки це не потребує додаткового роздуму у випадку, якщо потрібно об'єднати більше двох чисел. Я думаю, що виборці погоджуються, але просто цікаво, чи є якась історична чи інша причина, що стоїть за обґрунтуванням середнього рівня.
MrBoJangles

Відповіді:


152

Використовуйте "" + 5 + 6для примушування до струн. Це працює і з числовими змінними:

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


Так, значення 5 і 6 знаходяться у двох змінних: var1 = 5; var2 = 6; чи все ще буде працювати
Хайді

3
Цю відповідь слід відредагувати, безумовно, це кращий підхід. const numbersAsString = `${5}${6}`;
Павол Травник


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 є функція, яка б це зробила. Я займався математичним програмуванням і мені потрібно було об'єднати два числа.

Отже, що робити, якщо мені потрібно було поєднати два числа 17 і 29. Звичайно, я можу перетворити їх у рядки і об'єднати їх, а потім перетворити новий рядок у число. Це, здається, працює досить добре, і я можу продовжити свій код, але давайте подивимось тут і спробуємо з’ясувати, що тут насправді відбувається.

Що ми робимо з цими двома числами, як візьмемо 17 і 29 і перетворимо їх на тисячу сімсот двадцять дев'ять? Що ж, ми можемо помножити 17 на 100, тоді додамо 29. А як приблизно 172 і 293 отримати сто сімдесят дві тисячі двісті дев'яносто три? Помножте 172 на 1000 і додайте 293. А як же тільки 2 і 9? Помножте 2 на 10, потім додайте 9, щоб отримати 29.

Тож сподіваємось, до цього моменту шаблон повинен бути зрозумілий для вас. Ми можемо розробити математичну формулу, щоб зробити цей розрахунок для нас, а не просто використовувати рядки. Щоб з'єднати будь-які два числа, a і b, нам потрібно взяти добуток a і 10 на силу довжини b, а потім додати b.

Отже, як ми отримаємо довжину числа b? Ну, ми могли б перетворити b в рядок і отримати властивість довжини його.

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

Але повинен бути кращий спосіб зробити це без рядків, правда? Так, є.

введіть тут опис зображення

Для будь-яких двох чисел, a і b, з будь-якою базою B. Ми будемо перемножувати a на базу B на потужність довжини b (використовуючи базу журналу b, потім підлогу, щоб отримати найближче ціле число, а потім додаємо 1 до нього) потім додаючи b.

Отже, наш код виглядає приблизно так:

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

Але зачекайте, що робити, якщо я хотів це зробити в базі 2 або 8? Як я можу це зробити? Ми не можемо використовувати нашу формулу, яку ми тільки що створили з будь-якою іншою базою, окрім бази 10. Об'єкт JavaScript Math вже має вбудовані функції для базових 10 та 2 (лише Math.log), але як отримати функції журналу для будь-якої інша база? Ми розділимо журнал b на лог бази.Math.log(b) / Math.log(base).

Отже, тепер у нас є повністю функціонуючий математичний код для об'єднання двох чисел:

    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



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

Щоб додати до всіх відповідей вище, я хочу поділитися фоновою логікою:

Плюс - це оператор додавання, який також використовується для об'єднання рядків. Коли ми хочемо об'єднати числа. Слід розуміти, що ми хочемо об'єднати рядки, оскільки об'єднання чисел не робить для мене дійсних випадків використання.

Ми можемо досягти цього кількома способами,

Через перетворення типів

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

Це також буде працювати і робити перетворення типів у фоновому режимі,

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

Якщо ви вирішили об'єднати два рядки, а тип виводу повинен бути int, parseInt () працює тут

parseInt(5 +""+ 5)  //Output 55 Type "number"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.