jqGrid错误,过滤小数字

时间:2012-12-25 06:07:31

标签: javascript jquery jqgrid

圣诞快乐!

我最近遇到了一个试图用jqGrid过滤小数字的错误。我正在过滤数量范围从10到1到10 ^( - 8)或更小的数字。我发现它可以很好地过滤这些数字......直到它们变得小于10 ^( - 6)。

这个号码有什么好玩的?从我的控制台(Chrome)中查看以下输出:

>e6=.000001
 0.000001
>e7=.0000001
 1e-7

这是浏览器(或JavaScript)开始使用科学记数法的时候。

如果没有进一步的说明,这里是演示错误的代码。

$(document).ready(function() {

    var smallnumbers = {
        values: [
            {value: 100, text: "100"},
            {value: 10, text: "10"},
            {value: 1, text: "1"},
            {value: .1,  text: "10^(-1)"},
            {value: .01, text: "10^(-2)"},
            {value: .001, text: "10^(-3)"},
            {value: .0001, text: "10^(-4)"},         
            {value: .00001, text: "10^(-5)"},
            {value: .000001, text: "10^(-6)"},   
            {value: .0000001, text: "10^(-7)"},   
            {value: .00000001, text: "10^(-8)"},   
            {value: .000000001, text: "10^(-9)"},   
            {value: .00000000001, text: "10^(-10)"},
        ]
    };

    var myfilter = {
        groupOp: "OR",
        rules: [
            {field: 'value', op: 'lt', data: 1}
        ]
    };

    var grid = $('#demo').jqGrid({
        datatype: 'local',
        colNames: ['Value', 'Text'],
        colModel: [
        {
            name: 'value',
            index: 'value',
            width: '100'
        },
        {
            name: 'text',
            index: 'text',
            width: 100
        }
        ],
        data: smallnumbers.values,
        width: 500,
        height: '100%',
        pager: '#pager',
        viewrecords: true,
        caption: 'Bug with filtering small numbers',
        search: true,
        postData: {
            filters: myfilter
        }
    });
});

JavaScript能够对小于10 ^( - 6)的数字执行分支语句,如下所示:

> if (e7 < 1) { console.log("This should appear"); }
This should appear
> if (e7 > 1) { console.log("This should not appear"); }
>

但似乎jqGrid不是!

是什么给出的?这个错误的一个解决方法是将小数字向上舍入,只要绑定总是大于它们舍入到的数字。但我还是想知道发生了什么。是时候查看源代码......

1 个答案:

答案 0 :(得分:1)

我们找到了解决方案:向colModel中的每一列添加sorttype:'float'。