Ext.js 中的 numberfield 自动截取0的问题
网上百度查到的问题各式各样的都有,在这里我只代表自己的看法和见解,同时也欢迎大家来更正
项目环境
前端框架 Ext.js 4.2
需求
由于公司项目做的财务系统,因此需要对小数点进行管控,小数点位数问题等,遇到的问题是当显示数据的时候numberfield 会将小数点末尾的0自动截取掉,导致精度不匹配
例如: 输入的数字是 12.210 系统前端就会截取0,最后变成 12.21
解决方案 修改Ext.js 中的源码,由于该项目导入的源码是 ext-all.js ,因此只能在上面做修改
找到这个内容
由于系统小数点设置中有多加一个是否进行补位的选择框,因此在Number 中自行添加了一个属性,用来判断是否进行自动补位,在页面做调用跟其他属性一样,通过属性 : true/false ,进行设置
编写好运行,就能发现Numberfield 不会自动截取0 了
附上 源代码:
valueToRaw: function (c) {
var b = this, a = b.decimalSeparator;
c = b.parseValue(c);
//源代码
/c = b.fixPrecision(c);
/// c = Ext.isNumber(c) ? c : parseFloat(String(c).replace(a, "."));
//c = isNaN(c) ? "" : String(c).replace(".", a);
// return c
/*2019-06-28 由于需要自动补位 numberfield 不自动截取0 注释了下面代码*/
if(this.decimalAutoType){ /*自动补位*/
c = b.fixPrecision(c);
c = Ext.isNumber(c) ? c : String(c).replace(a, ".");
//c = isNaN(c) ? "" : (String(c).replace(".", a);
c = isNaN(c) ? "" : c.toFixed(this.decimalPrecision, this.decimalAutoType);
if(c == 0 || parseFloat(c) == 0){
return 0;
}
return c
}else{ /*不自动补位*/
c = isNaN(c) ? "" : String(c).replace(".", a);
var temp = Ext.isNumber(c) ? c : parseFloat(String(c).replace(a, "."));
return temp
}
},
parseValue: function (a) {
/*2019-06-28 由于需要自动补位 numberfield 不自动截取0 注释了下面代码
a = parseFloat(String(a).replace(this.decimalSeparator, "."));*/
if(this.decimalAutoType){
a = parseFloat(String(a).replace(this.decimalSeparator, "."));
}else{
a = String(a).replace(this.decimalSeparator, ".");
}
return isNaN(a) ? null : a
},