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

问题描述 投票:0回答:1

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

{ xtype: 'numberfield', decimalPrecision: 3 }

现在,似乎默认情况下,ExtJS使用中点舍入到最接近的偶数:1.2345变成1.234,而1.2355变成1.236。我需要将此行为更改为从零舍入,以使1.2345变为1.235。我该如何实现?谢谢。

extjs rounding extjs6.2
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);
    }
});

Fiddle

P.S。 This thread帮助了我

© www.soinside.com 2019 - 2024. All rights reserved.