前台如何把数据传给够短_前台 输入数据过大的时候 传到后台变成 e 报错如何处理?...

前台有个 单价*数量=总价

数据格式

{

number,

price,

totalPrice

}

实际输入过程中

1.单价输入过大 出现 e

2.数量输入过大 出现 e

3.单价数量都合适 但是总价又出现 e

理想情况

三个值都不能出现 e

请问大佬 前端如何解决这种问题,可以用手动限制最大值.

回答

转换成字符串来操作,最后的结果输出为字符串

可以参考最下面的代码,或者使用bigInt,兼容性如图

传给后端的话,也可以传数量和单价,让后端自己计算

60a5bce992d6c82105ca20026f93981e.png

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让后端计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值