0

我正在处理 ExtJS 6.2.1。我有一个数字字段,需要在分隔符后将其限制为三位数。所以我使用了 decimalPrecision 属性:

{ xtype: 'numberfield', decimalPrecision: 3 }

现在,ExtJS 似乎默认使用中点舍入到最接近的偶数:1.2345 变成 1.234,1.2355 变成 1.236。我需要将此行为更改为从零舍入,以便 1.2345 变为 1.235。我怎样才能做到这一点?谢谢。

4

1 回答 1

0

此操作发生在私有fixPrecision方法中。

        return parseFloat(Ext.Number.toFixed(parseFloat(value), precision));

我认为它没有像您期望的那样四舍五入的原因是它实际上存储为一个略小于 1.2345 的数字并且它向下舍入。这是由于在 RAM 中存储浮点数的方式

要修复组件的工作,我建议使用以下覆盖

Ext.define('Ext.form.field.NumberOverride', {
    override: 'Ext.form.field.Number',
    fixPrecision: function (value) {
        var me = this,
            nan = isNaN(value),
            precision = me.decimalPrecision;
        if (nan || !value) {
            return nan ? '' : value;
        } else if (!me.allowDecimals || precision <= 0) {
            precision = 0;
        }
        return (Math.round(value * (10 ** precision)) / (10 ** precision)).toFixed(precision);
    }
});

小提琴

PS这个帖子帮了我

于 2020-03-30T15:06:46.993 回答