0

圣诞节快乐!

我最近遇到了一个尝试使用 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 不是!

是什么赋予了?此错误的一种解决方法是将小数字向上舍入,只要边界始终大于它们四舍五入的值。但我仍然想知道发生了什么。是时候看看源代码了……

4

1 回答 1

1

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

于 2012-12-28T01:04:54.837 回答