前段js解决文本框录入保留多位小数设置

发布时间:2023年12月18日

自己在前段开发所遇到的问题整理了一下,供大家参考:

原本的代码:<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
}

文章来源:https://blog.csdn.net/u011189027/article/details/134973601
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。