当前位置: 代码迷 >> 综合 >> Ext.js 中的 numberfield 自动截取0的问题
  详细解决方案

Ext.js 中的 numberfield 自动截取0的问题

热度:88   发布时间:2023-11-21 14:45:16.0

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},