Как связать два числа в 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 в строку и получить ее свойство length.

    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, вы могли бы добавить проверку, что base is undefined, а затем установить 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

Чтобы мне было проще, я использовал прототип, чтобы добавить функцию к объекту 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

Чтобы добавить ко всем ответам выше, я хочу поделиться фоновой логикой:

Plus - это оператор сложения, который также используется для конкатенации строк. Когда мы хотим объединить числа. Следует понимать, что мы хотим объединить строки, поскольку объединение чисел не дает мне подходящих вариантов использования.

Мы можем добиться этого несколькими способами,

Сквозное преобразование типа

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.