这是一个简单的加减乘除计算,更多的是提供一个思路,没做很复杂的边界处理!!!
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div>
<input type="text" id="comp" onchange="compute()">
<button onclick="clearInput()">清空</button>
</div>
<script>
var inputEl = document.getElementById("comp")
// 计算输入框失去焦点时 计算内容
function compute() {
var value = inputEl.value
value = value.replace(/\s*/g, "");
var reg1 = /^(0|([1-9]\d*))(\.\d+)?[\+\-\*\/](0|([1-9]\d*))(\.\d+)?$/ //不限制小数位数的表达式
var reg2 = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/ // 只有一个数字
var result = ''
if (reg1.test(value)) {
let values = value.split(/[\+\-\*\/]/) // 根据运算符分割数字
let num1 = parseFloat(values[0])
let num2 = parseFloat(values[1])
if (value.indexOf('+') !== -1) {
result = formatValue(num1 + num2, 1)
}
if (value.indexOf('-') !== -1) {
result = formatValue(num1 - num2, 1)
}
if (value.indexOf('*') !== -1) {
result = formatValue(num1 * num2, 1)
}
if (value.indexOf('/') !== -1) {
result = formatValue(num1 / num2, 1)
}
} else if (reg2.test(value)) {
result = value
} else {
result = ''
}
inputEl.value = result;
}
// 处理小数精度问题
function formatValue(value, digit) {
var m = Math.pow(10, digit);
return parseFloat(value * m, 10) / m; // parseFloat():第一个参数 - String ,第二个参数 - 进制数
}
// 清空输入框内容
function clearInput() {
inputEl.value = ''
}
</script>
</body>
</html>