使用逗号和数据表小数

时间:2018-12-20 20:21:57

标签: javascript html datatable datatables

以这种方式添加逗号以分隔成千上万,现在它们给了我类似400000的结果,但是期望的结果是400,000。换句话说,我需要这些组的结果有一个comma,以便它们之间可以成千上万的距离

 $(document).ready(function () {
        var table = $('#example').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(/[\L,]/g, '') * 1 :
                        typeof i === 'number' ?
                        i : 0;
                };

                // Total over all pages
                total = api
                    .column(5)
                    .data()
                    .reduce(function (a, b) {
                        return intVal(a) + intVal(b);
                    }, 0);

                // Total over this page
                pageTotal = api
                    .column(5, { page: 'current' })
                    .data()
                    .reduce(function (a, b) {
                        return intVal(a) + intVal(b);
                    }, 0);

                // Update footer
                $(api.column(5).footer()).html(
                   // '' + pageTotal + ' ( L' + total + ' total)'
                   '' + total.toFixed(2)
                );
            },

            "columnDefs": [
                { "visible": false, "targets": 2 }
            ],
            "order": [[2, 'asc']],
            "displayLength": 25,
            "drawCallback": function (settings) {
                var api = this.api();
                var rows = api.rows({ page: 'all' }).nodes();
                var last = null;

                // 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 = [];
                api.column(2, { page: 'all' }).data().each(function (group, i) {
                    group_assoc = group.replace(' ', "_");
                    console.log(group_assoc);
                    if (typeof total[group_assoc] != 'undefined') {
                        total[group_assoc] = total[group_assoc] + intVal(api.column(5).data()[i]);
                    } else {
                        total[group_assoc] = intVal(api.column(5).data()[i]);
                    }
                    if (last !== group) {
                        $(rows).eq(i).before(
                            '<tr class="group"><td colspan="4">' + group + '</td><td class="' + group_assoc + '"></td></tr>'
                        );

                        last = group;
                    }
                });
                for (var key in total) {
                    $("." + key).html("$" + total[key].toFixed(2));
                }
            }
        });


    });


<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet" />
<link href="https://cdn.datatables.net/rowgroup/1.0.4/css/rowGroup.dataTables.min.css" rel="stylesheet" />
<script src="//code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/rowgroup/1.0.4/js/dataTables.rowGroup.min.js"></script>


<div class="container">
    <div class="row">
        <div class="col-xs-12">

            <table id="example" class="table table-bordered table-hover dt-responsive display" cellspacing="0" width="100%">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Position</th>
                        <th>Office</th>
                        <th>Age</th>
                        <th>Start date</th>
                        <th>Salary</th>
                    </tr>
                </thead>
                <tfoot>
                    <tr>
                        <th>Name</th>
                        <th>Position</th>
                        <th>Office</th>
                        <th>Age</th>
                        <th>Start date</th>
                        <th>Total:</th>
                    </tr>
                </tfoot>
                <tbody>

                    <tr>
                        <td>Garrett Winters</td>
                        <td>Accountant</td>
                        <td>Tokyo</td>
                        <td>63</td>
                        <td>2011/07/25</td>
                        <td>$170,750</td>
                    </tr>


                    <tr>
                        <td>Airi Satou</td>
                        <td>Accountant</td>
                        <td>Tokyo</td>
                        <td>33</td>
                        <td>2008/11/28</td>
                        <td>$162,700</td>
                    </tr>
                    <tr>
                        <td>Brielle Williamson</td>
                        <td>Integration Specialist</td>
                        <td>New York</td>
                        <td>61</td>
                        <td>2012/12/02</td>
                        <td>$372,000</td>
                    </tr>
                    <tr>
                        <td>Herrod Chandler</td>
                        <td>Sales Assistant</td>
                        <td>San Francisco</td>
                        <td>59</td>
                        <td>2012/08/06</td>
                        <td>$137,500</td>
                    </tr>


                    <tr>
                        <td>Sonya Frost</td>
                        <td>Software Engineer</td>
                        <td>Edinburgh</td>
                        <td>23</td>
                        <td>2008/12/13</td>
                        <td>$100,000</td>
                    </tr>

                    <tr>
                        <td>Quinn Flynn</td>
                        <td>Support Lead</td>
                        <td>Edinburgh</td>
                        <td>22</td>
                        <td>2013/03/03</td>
                        <td>$300,000</td>
                    </tr>





                    <tr>
                        <td>Doris Wilder</td>
                        <td>Sales Assistant</td>
                        <td>Sidney</td>
                        <td>23</td>
                        <td>2010/09/20</td>
                        <td>$85,600</td>
                    </tr>


                    <tr>
                        <td>Jennifer Chang</td>
                        <td>Regional Director</td>
                        <td>Singapore</td>
                        <td>28</td>
                        <td>2010/11/14</td>
                        <td>$357,650</td>
                    </tr>



                    <tr>
                        <td>Michelle House</td>
                        <td>Integration Specialist</td>
                        <td>Sidney</td>
                        <td>37</td>
                        <td>2011/06/02</td>
                        <td>$95,400</td>
                    </tr>


                    <tr>
                        <td>Timothy Mooney</td>
                        <td>Office Manager</td>
                        <td>London</td>
                        <td>37</td>
                        <td>2008/12/11</td>
                        <td>$136,200</td>
                    </tr>

                    <tr>
                        <td>Olivia Liang</td>
                        <td>Support Engineer</td>
                        <td>Singapore</td>
                        <td>64</td>
                        <td>2011/02/03</td>
                        <td>$234,500</td>
                    </tr>
                    <tr>
                        <td>Bruno Nash</td>
                        <td>Software Engineer</td>
                        <td>London</td>
                        <td>38</td>
                        <td>2011/05/03</td>
                        <td>$163,500</td>
                    </tr>


                    <tr>
                        <td>Finn Camacho</td>
                        <td>Support Engineer</td>
                        <td>San Francisco</td>
                        <td>47</td>
                        <td>2009/07/07</td>
                        <td>$87,500</td>
                    </tr>

                    <tr>
                        <td>Donna Snider</td>
                        <td>Customer Support</td>
                        <td>New York</td>
                        <td>27</td>
                        <td>2011/01/25</td>
                        <td>$112,000</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

这是我目前的结果 enter image description here

我想要这样的enter link description here

2 个答案:

答案 0 :(得分:0)

您需要指定Renderer才能以自定义格式显示列值。

您可以在已知的语言环境中使用intl plugin。如果您的目标是支持美国(按照您所描述的方式使用逗号),您可以这样做:

"columnDefs": [ { 
    "visible": false, 
    "targets": 2, 
    "render": $.fn.dataTable.render.intlNumber('us') 
}]

答案 1 :(得分:0)

您可以使用内置的number助手来解析您的电话号码。它接受五个可选参数,

  1. 千位分隔符(必需)
  2. 小数点分隔符(必需)
  3. 浮点精度-整数为0,小数点后为1,依此类推(可选)
  4. 前缀字符串(可选)
  5. 后缀字符串(可选)。

    render: $.fn.dataTable.render.number( ',', '.', 2, '$' )
    

这将格式化数字,例如$ 55,000.00。

通过代码,您可以在使用reduce()后计算总数时实现此目的。

total = api
        .column(5)
        .data()
        .reduce(function (a, b) {
            return intVal(a) + intVal(b);
        }, 0)
        .render(',', '.', 2, $);

这是他们的文档https://datatables.net/manual/data/renderers#Number-helper

的链接
相关问题