Это действие происходит в приватном 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 Эта тема помогла мне