Kendo Grid列格式{0:n0}未在编辑器生效,值被截断为两位小数
Kendo Grid薪资字段编辑显示小数位异常问题解答
场景回顾
你配置了Kendo Grid的薪资字段:
- 字段
field为"salary" - 列格式
format设为"{0:n0}"(表示保留0位小数) - 字段支持编辑,非编辑状态下会把输入的带小数数值显示为整数(比如输入99.123456,显示99),这部分表现正常
但遇到了两个问题:
问题1:再次点击字段编辑时,字段显示99.12,但未定义任何两位小数的格式,原因是什么?
问题2:读取数据时,薪资值同样为99.12。无论修改格式为何,编辑器始终显示两位小数,原因是什么?
复现步骤
- 点击薪资单元格进入编辑状态
- 输入
99.1232343245后退出编辑 - 再次点击该单元格,可见编辑器显示
99.12(控制台查看数据源,薪资值也为99.12),但列格式明明是n0(无小数位)
问题根源
这其实是Kendo Grid默认编辑器的默认配置行为导致的:
Kendo Grid给数值型字段默认使用的编辑器是NumericTextBox,而这个组件的默认decimals(小数位数)配置值是2。也就是说:
- 当你在编辑器中输入带多位小数的数值并完成编辑时,
NumericTextBox会自动把值四舍五入到两位小数,然后更新到数据源中——这就是为什么你在控制台看到薪资值变成了99.12。 - Grid列的
format配置只负责非编辑状态下单元格的显示格式,完全不影响编辑器的行为。所以非编辑状态下列会把数据源的99.12格式化为99显示,但再次进入编辑时,编辑器读取的是数据源里已经被处理成两位小数的99.12,再加上编辑器默认保留两位小数,自然就显示99.12了。
这两个问题其实是同一个根源导致的,都是编辑器的默认小数位数设置在起作用。
解决方案
要让编辑器和列的显示行为保持一致,你需要给薪资字段的编辑器显式设置decimals:0,同时同步设置编辑器的format和列格式一致。示例代码如下:
columns: [{ field: "salary", format: "{0:n0}", editor: function(container, options) { // 自定义编辑器,覆盖默认的NumericTextBox配置 $('<input name="' + options.field + '"/>') .appendTo(container) .kendoNumericTextBox({ decimals: 0, // 强制保留0位小数 format: "{0:n0}", // 和列显示格式同步 spin: function(e) { // 可选:调整步进值为整数,符合薪资场景 e.sender.step(1); } }); } }]
这样设置后:
- 编辑时输入任何带小数的数值,编辑器都会自动取整为整数
- 数据源里的薪资值会保持为整数
- 再次进入编辑状态时,编辑器也会显示整数,和非编辑状态的显示一致
内容的提问来源于stack exchange,提问作者DavidDunham
相关产品推荐
相关产品推荐

