为什么jQuery DataTables会将0值转换为异常浮点数值?
问题根因
这个e+58的异常值是内置数字渲染器参数传错导致的。$.fn.dataTable.render.number的参数顺序固定为:千位分隔符、小数分隔符、保留小数位数、前缀、后缀。你给前两个分隔符参数传了null,部分版本的DataTables没有对null做容错处理,在做小数位偏移计算的时候会把null当成非法值参与运算,触发浮点数计算溢出,才会生成完全不符合预期的超大科学计数法结果。
另外你贴的代码最后多了一行多余的});,属于语法错误,虽然不是这次数值异常的直接原因,但运行时会抛JS报错。
修复方法
分隔符参数不需要自定义的时候不要传null,用实际的合法值:
- 需要千位分隔符就传
,,不需要就传空字符串'' - 小数分隔符通用场景默认用
.就行
修正后的渲染器配置:
// 带千位分隔符的写法,最终效果类似$2,000.00 render: $.fn.dataTable.render.number(',', '.', 2, '$'), // 不带千位分隔符的写法,最终效果类似$2000.00 // render: $.fn.dataTable.render.number('', '.', 2, '$'),
完整修正代码
HTML部分
<table id="budgets" class="table table-striped"> <thead> <tr> <th>Jan</th> </tr> </thead>
JS初始化部分
$(document).ready(function () { $('#budgets').DataTable({ paging: false, ordering: false, info: false, data: data, scrollY: 400, columnDefs: [ { orderable: false, render: $.fn.dataTable.render.number(',', '.', 2, '$'), targets: [0], } ], columns: [ { data: "months[0].value" } ] }); });
你数据源里带长串小数尾缀的数值(比如2000.0000000000000000)不会影响渲染,JSON解析后会自动转为标准Number类型,渲染器会自动按配置保留两位小数输出。
问题复现截图:
内容的提问来源于stack exchange,提问作者tnk479
相关产品推荐
相关产品推荐

