我有两个字符串,其中只包含数字:
var num1 = '20',
num2 = '30.5';
我本以为我可以把它们加在一起,但它们却被连接起来:
num1 + num2; // = '2030.5'
我如何才能迫使这些字符串被视为数字?
我有两个字符串,其中只包含数字:
var num1 = '20',
num2 = '30.5';
我本以为我可以把它们加在一起,但它们却被连接起来:
num1 + num2; // = '2030.5'
我如何才能迫使这些字符串被视为数字?
当前回答
我总是减去0。
num1-0 + num2-0;
假定一元操作符方法少了一个字符,但并不是每个人都知道一元操作符是什么,或者当他们不知道它被称为什么的时候如何谷歌来找出它。
其他回答
document.getElementById(currentInputChoosen).value -= +-100;
在我的情况下,如果你遇到了和我一样的问题,却找不到解决方案,找到了这个SO问题。
抱歉有点跑题了,但我刚刚发现这是有效的,我想它可能值得分享。
不知道这是一个肮脏的变通办法,还是真的合法。
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'));
}
如果你想将数字作为字符串来执行操作(就像在数字大于64位的情况下),你可以使用大整数库。
const bigInt = require('big-integer')
bigInt("999").add("1").toString() // output: "1000"
我在我的项目中使用了这个。我使用+符号处理字符串作为一个数字(在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>
希望能有所帮助
如果你需要把两个非常大的字符串加在一起,你需要在每个字符串位置计算加法:
function addStrings(str1, str2){
str1a = str1.split('').reverse();
str2a = str2.split('').reverse();
let output = '';
let longer = Math.max(str1.length, str2.length);
let carry = false;
for (let i = 0; i < longer; i++) {
let result
if (str1a[i] && str2a[i]) {
result = parseInt(str1a[i]) + parseInt(str2a[i]);
} else if (str1a[i] && !str2a[i]) {
result = parseInt(str1a[i]);
} else if (!str1a[i] && str2a[i]) {
result = parseInt(str2a[i]);
}
if (carry) {
result += 1;
carry = false;
}
if(result >= 10) {
carry = true;
output += result.toString()[1];
}else {
output += result.toString();
}
}
output = output.split('').reverse().join('');
if(carry) {
output = '1' + output;
}
return output;
}