前台 输入数据过大的时候 传到后台变成 e 报错如何处理?
前台有个 单价*数量=总价
数据格式
{number,
price,
totalPrice
}
实际输入过程中
1.单价输入过大 出现 e
2.数量输入过大 出现 e
3.单价数量都合适 但是总价又出现 e
理想情况
三个值都不能出现 e
请问大佬 前端如何解决这种问题,可以用手动限制最大值.
回答
转换成字符串来操作,最后的结果输出为字符串
可以参考最下面的代码,或者使用bigInt,兼容性如图
传给后端的话,也可以传数量和单价,让后端自己计算
bigMut(999999999, 9999999999999); // "9999999989999000000001"function bigMut(big, common) {
big += "";
common += "";
if (big.length < common.length) {
big = [common, common = big][0];
}
big = big.split("").reverse();
var oneMutManyRes = [];
var i = 0,
len = big.length;
for (; i < len; i++) {
oneMutManyRes[oneMutManyRes.length] = oneMutMany(big[i], common) + getLenZero(i);
}
var result = oneMutManyRes[0];
for (i = 1, len = oneMutManyRes.length; i < len; i++) {
result = bigNumAdd(result, oneMutManyRes[i]);
}
return result;
}
function getLenZero(len) {
len += 1;
var ary = [];
ary.length = len;
return ary.join("0");
}
function oneMutMany(one, many) {
one += "";
many += "";
if (one.length != 1) {
one = [many, many = one][0];
}
one = parseInt(one, 10);
var i = 0,
len = many.length,
resAry = [],
addTo = 0,
curItem,
curRes,
toSave;
many = many.split("").reverse();
for (; i <= len; i++) {
curItem = parseInt(many[i] || 0, 10);
curRes = curItem * one + addTo;
toSave = curRes % 10;
addTo = (curRes - curRes % 10) / 10;
resAry.unshift(toSave);
}
if (resAry[0] == 0) {
resAry.splice(0, 1);
}
return resAry.join("");
}
function bigNumAdd(big, common) {
big += "";
common += "";
var maxLen = Math.max(big.length, common.length),
bAry = big.split("").reverse(),
cAry = common.split("").reverse(),
i = 0,
addToNext = 0,
resAry = [],
fn,
sn,
sum;
for (; i <= maxLen; i++) {
fn = parseInt(bAry[i] || 0);
sn = parseInt(cAry[i] || 0);
sum = fn + sn + addToNext;
addToNext = (sum - sum % 10) / 10;
resAry.unshift(sum % 10);
}
if (resAry[0] == 0) {
resAry.splice(0, 1);
}
return resAry.join("");
}
从实际出发看看是否真的需要这么大的数字,
- 如果不需要就增加最大值限制;
- 如果需要那就得转字符串处理了,可以使用第三方库bignumber.js
用字符串表示数字,偷懒一点的话totalPrice让后端计算。
以上是 前台 输入数据过大的时候 传到后台变成 e 报错如何处理? 的全部内容, 来源链接: utcz.com/a/71529.html