You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。也就是说:

  1. 当你在编辑器中输入带多位小数的数值并完成编辑时,NumericTextBox会自动把值四舍五入到两位小数,然后更新到数据源中——这就是为什么你在控制台看到薪资值变成了99.12。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:14:36