圣诞快乐!
我最近遇到了一个试图用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不是!
是什么给出的?这个错误的一个解决方法是将小数字向上舍入,只要绑定总是大于它们舍入到的数字。但我还是想知道发生了什么。是时候查看源代码......
答案 0 :(得分:1)
我们找到了解决方案:向colModel中的每一列添加sorttype:'float'。