我想5 + 6返回"56"而不是返回11。
我想5 + 6返回"56"而不是返回11。
Answers:
用于"" + 5 + 6将其强制为字符串。这也适用于数字变量:
var a = 5;
var b = 6;
console.log("" + a + b);
const numbersAsString = `${5}${6}`;
我知道这是一个旧帖子,已经被多次回答。我也想知道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
您还可以使用toString函数将其转换为字符串并进行连接。
var a = 5;
var b = 6;
var value = a.toString() + b.toString();
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
这是简单的方法
var value=5+""+6;
我像这样转换回数字
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;
}
这次投票很不错,谢谢:)
我对此并不陌生,请来到这里向大家学习为什么会变得很好的解释。
无论如何,我更新了代码以显示我如何解决我的问题,因为这篇文章帮助我弄清楚了。
要添加到以上所有答案中,我希望共享背景逻辑:
加是加法运算符,也用于字符串的串联。当我们要连接数字时。应该理解我们要连接字符串,因为数字的连接对我来说不是有效的用例。
我们可以通过多种方式实现它,
通过类型转换
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"