如何在javascript中连接两个数字?


107

我想5 + 6返回"56"而不是返回11


3
好吧,您当然会得到很多答案。我投票支持所有正确的投票。
David

几个答案的中间是空字符串。似乎很奇怪,我想知道为什么这对任何人都更可取。在开头加上引号可以快速表明意图,并且似乎更有意义,因为在必须连接两个以上的数字的情况下不需要其他思考。我想选民同意,但是只是想知道中间原因背后是否存在任何历史或其他原因。
MrBoJangles

Answers:


152

用于"" + 5 + 6将其强制为字符串。这也适用于数字变量:

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


好吧,假设值5和6在两个变量中:var1 = 5; var2 = 6; 它会继续工作
Heidi

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是否具有可以做到这一点的功能。我正在做一些数学编程,需要连接两个数字。

因此,如果我需要将两个数字17和29相结合,该怎么办。当然,我可以将它们转换为字符串并将其连接起来,然后将新的字符串转换回数字。这似乎工作得很好,我可以继续我的代码,但是让我们在这里看看并尝试弄清楚这里到底发生了什么。

我们要对这两个数字做些什么,我们如何取17和29并将其变成1,279?好吧,我们可以将17乘以100,然后再加上29。那么172和293怎么能得到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以外的其他基数创建的公式。JavaScriptMath对象已经具有针对基数10和2的内置函数(仅Math.log),但是如何获取任何基数的日志函数其他基地?我们将b的对数除以base的对数。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 = 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

8

您还可以使用toString函数将其转换为字符串并进行连接。

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


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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.