自己在前段开发所遇到的问题整理了一下,供大家参考:
原本的代码:<input type="text" class="form-control" id="yfprice" style="text-align:right;" value="0" οnkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')">
问题1:避免input默认为整数时不能录入小数的问题
问题2:规避录入小数时自动填充0。?
优化之后的代码如下:
<input id="bg4" type="text" class="form-control bgipt" style="height: 32px;width: 120px;" οnkeyup="onkeyup1(this)"/>
js代码如下:
//保留小数点后9位数
? ? function onkeyup1(objs) {
? ? ? ? var value = $(objs).val();
? ? ? ? var qf_reg = new RegExp(",", "g");
? ? ? ? value = value.replace(qf_reg, "");
? ? ? ? var reg = /(^(\-|\+)?[1-9]\d*(\.\d{1,9})?$)|(^0(\.\d{1,9})?$)/;
? ? ? ? if (!reg.test(value)) {
? ? ? ? ? ? var weishu = value.split('.')[1];
? ? ? ? ? ? if (weishu.length < 9) {//小数点后的位数小于9还是等于原来的值;
? ? ? ? ? ? ? ? $(objs).val(value);
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $(objs).val(toFixed(parseFloat(value), 9));
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? $(objs).val(value);
? ? ? ? }
? ? }
这里附带一个自己写的toFixed方法,解决js自有toFixed方法的弊端。
function toFixed(number, m) {
? ? if (typeof number !== 'number') {
? ? ? ? throw new Error("number不是数字");
? ? }
? ? let result = Math.round(Math.pow(10, m) * number) / Math.pow(10, m);
? ? result = String(result);
? ? if (result.indexOf(".") == -1) {//无小数位
? ? ? ? //if (m != 0) {
? ? ? ? // ? ?result += ".";
? ? ? ? // ? ?result += new Array(m + 1).join('0');
? ? ? ? //}
? ? } else {
? ? ? ? let arr = result.split('.');
? ? ? ? if (arr[1].length < m) {
? ? ? ? ? ? arr[1] += new Array(m - arr[1].length + 1).join('0')
? ? ? ? }
? ? ? ? result = arr.join('.')
? ? }
? ? return result
}