如何在 ExtJS 的数字字段中实现从零开始的中点舍入?

How to achieve midpoint rounding away from zero in numberfield in ExtJS?

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

{ xtype: 'numberfield', decimalPrecision: 3 }

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

此操作发生在私有 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);
    }
});

Fiddle

P.S。 This thread 帮了我