Как добиться округления средней точки от нуля в числовом поле в Ext JS? - PullRequest
0 голосов
/ 30 марта 2020

Я имею дело с Ext JS 6.2.1. У меня есть числовое поле и нужно ограничить его до трех цифр после разделителя. Поэтому я использую свойство decimalPrecision:

{ xtype: 'numberfield', decimalPrecision: 3 }

Теперь кажется, что по умолчанию Ext JS использует округление средней точки до ближайшего четного числа: 1,2345 превращается в 1,234, а 1,2355 превращается в 1,236. Мне нужно изменить это поведение, чтобы округлить от нуля, чтобы 1.2345 превратился в 1.235. Как я могу достичь этого? Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Это действие происходит в приватном fixPrecision методе.

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

Я думаю, причина, по которой он не округляется, как вы ожидаете, заключается в том, что он на самом деле хранится как число чуть меньше 1,2345 и округляется. Это связано со способами хранения чисел с плавающей запятой в ОЗУ

. Чтобы исправить работу компонента, я предлагаю использовать следующее переопределение

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

PS Эта тема помогла мне

...