如何在codeigniter中对数据表求和
Posted
技术标签:
【中文标题】如何在codeigniter中对数据表求和【英文标题】:how to sum datatables in codeigniter 【发布时间】:2021-01-16 19:06:57 【问题描述】:结果只是显示
$NaN ( $NaN total)
我只是从datatables 复制代码,然后我只是更改了我想要对其求和的列。 这是我之前的代码
<script>
$(document).ready(function()
$('#tableoperasional').DataTable(
"footerCallback": function ( row, data, start, end, display )
var api = this.api(), data;
// Remove the formatting to get integer data for summation
var intVal = function ( i )
return typeof i === 'string'
? i.replace(/[\$,]/g, '') * 1
: typeof i === 'number'
? i
: 0;
;
// Total over all pages
total = api
.column( 2 )
.data()
.reduce( function (a, b)
return intVal(a) + intVal(b);
, 0 );
// Total over this page
pageTotal = api
.column( 2, page: 'current' )
.data()
.reduce( function (a, b)
return intVal(a) + intVal(b);
, 0 );
// Update footer
// Update footer
$( api.column( 2 ).footer() ).html(
'$'+pageTotal +' ( $'+ total +' total)'
);
);
);
</script>
我也更新了 js 库,但仍然没有任何反应。我希望你的帮助。
【问题讨论】:
添加了相关的javascript、jquery、jquery-datatables标签;格式化的代码可读。 我不明白你的意思 :( 。顺便说一句,我是 JS 新手。 添加该评论是因为我编辑了问题 ;-) 在下面查找答案。 【参考方案1】:主要问题
我认为问题在于您的intVal
函数。当String
传入其中时,所有$
和,
字符都将被删除,结果乘以1
(将其转换为Number
)。但是,如果 String.prototype.replace
没有删除所有非数字字符,则转换将失败并返回 NaN
。
例如:
var valueInColumn = '12,45%';
var nanResult = valueInColumn.replace(/[\$,]/g, '') * 1;
console.log(nanResult);
不要使用隐式转换 (* 1
),而是通过 parseFloat
/parseInt
使用显式转换。它的意图更清楚,也比隐式转换更安全:
var intVal = function (i)
return typeof i === 'string'
? parseFloat(i.replace(/[\$,]/g, '')) // <-- here
: typeof i === 'number'
? i
: 0;
如果这不能解决问题,intVal
可以变得更安全/更严格。方法如下:
var safeIntVal = i =>
var rval = i;
if (typeof rval === 'string')
rval = parseFloat(rval.replace(/[^\d\.]/g, '')); // <-- remove all non-numeric characters except dots and convert into a number
if (typeof rval !== 'number' || Number.isNaN(rval)) // <-- if the result of the conversion isn't a number or is NaN, set it to zero
rval = 0;
return rval; // <-- return
两种实现方式的差异在以下 sn-p 中可见:
var intVal = function ( i )
return typeof i === 'string'
? i.replace(/[\$,]/g, '') * 1
: typeof i === 'number'
? i
: 0;
;
var safeIntVal = function (i)
var rval = i;
if (typeof rval === 'string')
rval = parseFloat(rval.replace(/[^\d\.]/g, ''));
if (typeof rval !== 'number' || Number.isNaN(rval))
rval = 0;
return rval;
var testString = 'a23,3.65$b';
console.log('Original intVal result:', intVal(testString));
console.log('Modified safeIntVal result:', safeIntVal(testString));
旁注
您在 footerCallback
函数中声明了一个 data
变量,该变量会隐藏传递给回调的同名参数。此外,total
和 pageTotal
变量看起来像隐式全局变量(它们的声明没有 var
关键字)。
【讨论】:
以上是关于如何在codeigniter中对数据表求和的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Reporting Services 2008 中对多重查找值求和吗
如何在 pyspark 中对 spark 数据框中的多列求和?