如何在Ajax/JavaScript中正确执行数值加减?CodeIgniter POS系统问题
解决JavaScript数值运算变字符串拼接的问题
嘿,这个坑我踩过!你遇到的问题本质是Ajax返回的cash_received和cash_pending是字符串类型,而非数字类型——JavaScript本该自动把字符串转为数字做减法,但如果后端返回的数据是带格式的字符串(比如数据库取出后没转类型),就会误把500 - 200当成字符串拼接,输出500200。
下面给你几个靠谱的解决方案:
方案1:前端强制转换为数值类型
在接收数据时,先把字符串转为数字再运算,常用三种方法:
用parseInt处理整数金额
如果你的金额都是整数,推荐用parseInt并指定十进制基数(避免八进制解析的坑):
$.ajax({ url: 'payment/editPaymentByJason?id=' + iid, method: 'GET', dataType: 'json', }).success(function (response) { // 转换为整数 var cr = parseInt(response.cash_received, 10); var cp = parseInt(response.cash_pending, 10); var b = cr - cp; // 现在会得到正确的300 });
用parseFloat处理带小数的金额
如果涉及到小数(比如500.50、200.25),用parseFloat更合适:
$.ajax({ url: 'payment/editPaymentByJason?id=' + iid, method: 'GET', dataType: 'json', }).success(function (response) { var cr = parseFloat(response.cash_received); var cp = parseFloat(response.cash_pending); var b = cr - cp; });
用一元加号快速转换
如果确定返回的是纯数字字符串,也可以用更简洁的一元加号:
$.ajax({ url: 'payment/editPaymentByJason?id=' + iid, method: 'GET', dataType: 'json', }).success(function (response) { var cr = +response.cash_received; var cp = +response.cash_pending; var b = cr - cp; });
方案2:从后端(CodeIgniter)彻底解决
更省心的方法是在后端返回JSON时,直接把这两个字段转为数值类型,前端不用额外处理。
在你的editPaymentByJason方法里,取出数据库数据后强制转换类型再返回:
// 假设从数据库查询得到$payment数组 $response = [ 'cash_received' => (float)$payment['cash_received'], 'cash_pending' => (float)$payment['cash_pending'], // 其他字段... ]; // 返回JSON格式数据 header('Content-Type: application/json'); echo json_encode($response); exit;
这样前端拿到的cash_received和cash_pending就是数字类型,直接做减法就能得到正确结果。
内容的提问来源于stack exchange,提问作者Anderson
相关产品推荐
相关产品推荐

