本文主要是介绍前段js解决文本框录入保留多位小数设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自己在前段开发所遇到的问题整理了一下,供大家参考:
原本的代码:<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
}
这篇关于前段js解决文本框录入保留多位小数设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!