Search code examples
javascriptdatatabledatatablesdatatables-1.10

Formatting numbers using DataTables breaks sorting


I have a tables that I am trying to sort, the problem is that when I add locales to the numbers, it breaks sorting, it sorts as it were strings.

I followed this answer and I modified without having to use regex, but then it begins sorting as it were strings and no longer numbers, for instance

1
1.200
2
$(document).ready(function () {
    $('.my_table').DataTable({
        "bProcessing": true,
        "bPaginate": true,
        "bDestroy": true,
        "bShowPollInfo": false,
        "iDisplayLength": 20,
        "aLengthMenu": [[20, 40, -1], [20, 40, "_all"]],
        "sScrollX": "100%",
        "aoColumns": [
            { "sWidth": "160px", "sClass": "nowrap" },
        ],
        "aoColumnDefs": [
            {
               "mRender": function (data, type, row) {
                   return formatNumbers(data);
               },
               "aTargets": [1, 2]
            },
        ],
    });
});
function formatNumbers(val) {
    return parseInt(val).toLocaleString("de-DE");
}

Solution

  • Change the "aoColumnDefs" part to this

    "aoColumnDefs": [
        {
           "mRender": function (data, type, row) {
                if( type === 'display' ){
                    return formatNumbers(data); // only format the data for display
                }else{
                    return data; // the default data should be used for sorting
                }
           },
           "aTargets": [1, 2]
        },
    ],