我有两个字符串,其中只包含数字:

var num1 = '20',
    num2 = '30.5';

我本以为我可以把它们加在一起,但它们却被连接起来:

num1 + num2; // = '2030.5'

我如何才能迫使这些字符串被视为数字?


当前回答

你可以这样用:

var num1 = '20',
    num2 = '30.5';

alert((num1*1) + (num2*1)); //result 50.5

当在num1中应用*1时,将字符串转换为数字。

如果num1包含字母或逗号,则返回NaN乘以1

如果num1为空,num1返回0

亲切的问候! !

其他回答

我在我的项目中使用了这个。我使用+符号处理字符串作为一个数字(在with_interest变量)

<script>
function computeLoan(){
var amount = document.getElementById('amount').value;
var interest_rate = document.getElementById('interest_rate').value;
var days = document.getElementById('days').value;
var interest = (amount * (interest_rate * .01)) / days;
var payment = ((amount / days) + interest).toFixed(2);
var with_interest = (amount * (interest_rate * .01));
var with_interesst = (+amount * (interest_rate * .01)) + (+amount);
payment = payment.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById('payment').innerHTML = "Target Daily = PHP"+payment;
document.getElementById('with_interesst').innerHTML = "Amount w/Interest =   PHP"+with_interesst;
}
</script>

<div name="printchatbox" id="printchatbox">
 <form id="Calculate" class="form-horizontal">
   <h2>You Can Use This Calculator Before Submit </h2>
   <p>Loan Amount: PHP<input id="amount" type="number" min="1" max="1000000"  onchange="computeLoan()"></p>
   <p>Interest Rate: <input id="interest_rate" type="number" min="0" max="100" value="10" step=".1" onchange="computeLoan()">%</p>
    <p>Term<select id="days" type="number" min="1" max="72" step=".1" onchange="computeLoan()">
    <option value="40">40 Days</option>
    <option value="50">50 Days</option>
    <option value="60">60 Days</option>
    <option value="70">70 Days</option>
    <option value="80">80 Days</option>
    <option value="90">90 Days</option>
    <option value="100">100 Days</option>
    <option value="120">120 Days</option>
    </select>
    </p>                        
   <h2 id="payment"></h2>
   <h2 id ="with_interesst"></h2>
 </form>
</div>

希望能有所帮助

如果你想将数字作为字符串来执行操作(就像在数字大于64位的情况下),你可以使用大整数库。

const bigInt = require('big-integer')
bigInt("999").add("1").toString() // output: "1000"

可以使用parseInt将字符串解析为数字。为了安全起见,始终传递10作为以10为基数解析的第二个参数。

num1 = parseInt(num1, 10);
num2 = parseInt(num2, 10);
alert(num1 + num2);

parseInt的MDN文档 用于parseFloat的MDN文档

在parseInt中,基数被指定为10,所以我们以10为基数。在非严格javascript中,以0开头的数字被视为八进制。这显然会引起问题!

parseInt(num1, 10) + parseInt(num2, 10) //base10
parseFloat(num1) + parseFloat(num2)

还可以参考ChaosPandion的回答,了解使用一元运算符的有用快捷方式。我设置了一个小提琴来展示不同的行为。

http://jsfiddle.net/EtX6G/

var ten = '10';
var zero_ten = '010';
var one = '1';
var body = document.getElementsByTagName('body')[0];

Append(parseInt(ten) + parseInt(one));
Append(parseInt(zero_ten) + parseInt(one));
Append(+ten + +one);
Append(+zero_ten + +one);

function Append(text) {
    body.appendChild(document.createTextNode(text));
    body.appendChild(document.createElement('br'));
}

try

var x = parseFloat(num1) + parseFloat(num2) ;

或者,根据你的需要:

var x = parseInt(num1) + parseInt(num2) ;

http://www.javascripter.net/faq/convert2.htm

你可能想读一下Douglas Crockford写的《Javascript: the Good Parts》这本书。Javascript有一个相当大的陷阱集合!这本书对澄清这些问题大有帮助。另请参阅

http://www.crockford.com/ http://javascript.crockford.com/

以及Crockford先生的优秀文章《Javascript:世界上最被误解的编程语言》。