js calculation of decimal high-precision calculation functions finishing
Specific code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>只允许输入两位小数\高精度计算</title>
</head>
<body>
<input type="text" name="jiage" id="jiage" onblur="clearNoNum(this)"/>元
<input type="text" name="geshu" id="geshu"/>个
<button type="button" onclick="jia()">计算</button>
<script type="text/javascript">
function clearNoNum(obj) {
obj.value = obj.value.replace(/[^\d.]/g, "");
obj.value = obj.value.replace(/\.{2,}/g, ".");
obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');
if (obj.value.indexOf(".") < 0 && obj.value != "") {
obj.value = parseFloat(obj.value);
}
if (!obj.value || obj.value == '0' || obj.value == '0.0' || obj.value == '0.00') {
alert('退款金额不能为空');
return;
}
}
function jia() {
var jiage = document.getElementById('jiage').value;
alert('jiage' + jiage);
var geshu = document.getElementById('geshu').value;
alert('geshu' + geshu);
var zongshu = 0;
zongshu = accAdd(jiage, geshu);
alert('相加=' + zongshu);
zongshu = Subtr(jiage, geshu);
alert('相减=' + zongshu);
zongshu = accMul(jiage, geshu);
alert('相乘=' + zongshu);
zongshu = accDiv(jiage, geshu);
alert('相除=' + zongshu);
}
function accAdd(arg1, arg2) {
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split(".")[1].length
} catch (e) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m + arg2 * m) / m
}
Number.prototype.add = function (arg) {
return accAdd(arg, this);
}
var t1 = 6.60;
var t2 = 1.32;
var t3 = 1.2;
var t4 = 1.2;
var t5 = 1.2;
function Subtr(arg1, arg2) {
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split(".")[1].length
} catch (e) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2));
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
function accMul(arg1, arg2) {
var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
try {
m += s1.split(".")[1].length
} catch (e) {
}
try {
m += s2.split(".")[1].length
} catch (e) {
}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}
Number.prototype.mul = function (arg) {
return accMul(arg, this);
}
function accDiv(arg1, arg2) {
var t1 = 0, t2 = 0, r1, r2;
try {
t1 = arg1.toString().split(".")[1].length
} catch (e) {
}
try {
t2 = arg2.toString().split(".")[1].length
} catch (e) {
}
with (Math) {
r1 = Number(arg1.toString().replace(".", ""))
r2 = Number(arg2.toString().replace(".", ""))
return (r1 / r2) * pow(10, t2 - t1);
}
}
</script>
</body>
</html>