You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:48:54