input框输入金额显示千分位

好比输入:1000000,则显示为1,000,000(或者是保留3位小数:1,000,000.000)java

知识点:git

1)JavaScript parseFloat() 函数正则表达式

定义:parseFloat() 函数可解析一个字符串,并返回一个浮点数数组

语法:parseFloat(string)函数

  a)parseFloat 将它的字符串参数解析成为浮点数并返回;this

  b)若是在解析过程当中遇到了正负号(+ 或 -)、数字 (0-9)、小数点,或者科学记数法中的指数(e 或 E)之外spa

的字符,则它会忽略该字符以及以后的全部字符,返回当前已经解析到的浮点数;code

  c)参数字符串首位的空白符会被忽略;orm

注意:若是参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。blog

提示:您能够经过调用 isNaN 函数来判断 parseFloat 的返回结果是不是 NaN。若是让 NaN 做为了任意数学运算的操做数,则运算结果一定也是 NaN。

1 parseFloat("10")                10
2 parseFloat("10.00")             10
3 parseFloat("10.33")             10.33
4 parseFloat("34 45 66")          34
5 parseFloat("   60   ")          60
6 parseFloat("40 years")          40
7 isNaN(parseFloat("40 years"))   false
8 parseFloat("He was 40") NaN 9 isNaN(parseFloat("He was 40"))  true

2)JavaScript toFixed() 方法

定义:toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

语法:NumberObject.toFixed(num),num参数必需,规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实

现能够支持更大的数值范围。若是省略了该参数,将用 0 代替。

以下:把数字舍入为仅有一位小数的数字:

1 var num =13.36; 2 alert(num.toFixed(1));    13.4

3)JavaScript isNaN() 函数:

定义:isNaN() 函数用于检查其参数是不是非数字值。

语法:isNaN(x),若是 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。若是 x 是其余值,则返回 false,前提条件:x不能为空

提示:isNaN() 函数一般用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是不是合法的数字。固然也能够用 isNaN() 函数来检测算数错误,好比用 0 做除数的状况

4)JavaScript reverse() 方法:

定义:reverse() 方法用于颠倒数组中元素的顺序

语法:array.reverse()

5)JavaScript split() 方法:

定义:split() 方法用于把一个字符串分割成字符串数组

语法:stringObject.split(separator,howmany)

  参数separator:必需。字符串或正则表达式,从该参数指定的地方分割 stringObject;

  参数howmany:可选。该参数可指定返回的数组的最大长度。若是设置了该参数,返回的子串不会多于这个参数指定的数组。若是没有设置该参数,整个字符串都会被分割,不考虑它的长度;

注释:若是把空字符串 ("") 用做 separator,那么 stringObject 中的每一个字符之间都会被分割。

注释:String.split() 执行的操做与 Array.join 执行的操做是相反的

宝典在这

 

6)JavaScript join() 方法:

定义:join() 方法用于把数组中的全部元素放入一个字符串

语法:arrayObject.join(separator)

  参数separator:可选。指定要使用的分隔符。若是省略该参数,则使用逗号做为分隔符。

提示:join("")则意味将数组拼接成字符串

 

需求:

input框输入金额,要求按千分位显示并四舍五入保留3位小数,其中要求只能输入大于的0的数字,小数位不做限制

分析:

一、四舍五入且保留指定小数位:toFixed() 方法

二、输入大于0的数字且输入时小数位不作限制:正则表达式校验

  1)正整数部分(>0整数):[1-9][0-9]*  表示以1-9任意一个数开头,*表示出现0次或屡次;

  2)含小数部分(注意不能是0.0000...):[0]\.[0-9]{0,2}[1-9]\d*|[1-9][0-9]*\.\d*  表示整数位0的小数保留3位四舍五入后不能是0.000,整数不为0的均可以

三、整数部分加千分位:

  1)先把通过toFixed()处理后,利用split(".")将整数和小数分开并分包存储;

   2)整数部分加千分位:能够从低位→高位,每隔3位插入逗号,还有注意最高位不能以逗号开头;

    2.1)利用split("")将整数部分切割成数组;

    2.2)利用reverse()将切割后数组颠倒;

    2.3)遍历数组:数组下标+1和3求余(数组下标从0开始)来从新拼接字符串或者push给新数组;

    2.4)再利用reverse()颠倒新数组,利用join("")拼接;

四、字符串拼接:整数部分加千分位+"."+小数部分;

<input class="base-form-input " id="mny" type="text" onchange="numChange(this.value)" value="<fmt:formatNumber type='number' value='' pattern="#,##0.000" maxFractionDigits='3'/>">

javaScript脚本(红色部分须要根据状况修改

//光标离开输入的金额四舍五入并保留3位小数
    $("#mny").blur(function(){//输入obj=123456.7890
        var obj = this.value; var mnyReg = /^([1-9][0-9]*|(([0]\.[0-9]{0,2}[1-9]\d*|[1-9][0-9]*\.\d*)))$/;//根据需求修改 if(!(mnyReg.test(obj))){ layer.tips("请输入正确的资金", $(this).attr("id"),{time:1000}); return; } var n = 3; //保留得小数位
        obj = parseFloat(obj).toFixed(n); //obj=123456.789
        var left = obj.split(".")[0].split("").reverse();//left = ["6","5","4","3","2","1"]
        var right = obj.split(".")[1]; //right = "789"
        var total = new Array(); for (i = 0; i < left.length; i++) { total.push(left[i]); if((i + 1) % 3 == 0 && (i + 1) != left.length){ total.push(","); } } //total = ["6","5","4",",","3","2","1"]
        $("#mny").val(total.reverse().join("") + "." + right); })
//光标进入,去除金额千分位,并去除小数后面多余的0
$("#mny").focus(function(){ var oldMny = this.value.replace(/,/g, ''); if(oldMny.indexOf(".")>0){ oldMny = oldMny.replace(/0+?$/,"");//去除尾部多余的0 oldMny = oldMny.replace(/[.]$/,"");//若是最后一位是.则去掉 } this.value = oldMny; })

取值进行保存操做的时候,要把千分位去掉:能够用全局匹配替换逗号

var reg_mny = $("#mny").val().trim().replace(/,/g, '');

 

若是想光标再次进入的时候显示原先输入的值,能够再方法外面定义一个变量var oldMny,存储输入的金额:

当光标进入时候,取oldMny赋值给input(最原始的未四舍五入的值);光标离开时候,则把input值存到oldMny;

相关文章
相关标签/搜索