<template>
<span style="width: 200px; display: inline-block;">
<Input v-model="inputNumberValue"
:disabled="disabled"
@on-keyup="keyup"
@on-blur="blur"
@on-keydown="keydown" />
</span>
</template> <script>
export default {
name: 'InputNumberZen',
components: {},
props: {
value: {
type: [String, Number],
default: ''
},
maxlength: {
type: Number,
default: 9
},
disabled: {
type: Boolean,
default: false
}
},
data () {
return {
inputNumberValue: '',
keyList: [
8, // 退格键
96, // 0
97, // 1
98, // 2
99, // 3
100, // 4
101, // 5
102, // 6
103, // 7
104, // 8
105, // 9
110, // .
190, // .
46, // del
48, // 0
49, // 1
50, // 2
51, // 3
52, // 4
53, // 5
54, // 6
55, // 7
56, // 8
57, // 9
37, // left
39 // right
]
}
},
methods: {
blur (e) {
let val = this.inputNumberValue.toString()
this.inputNumberValue = Number(val).toString()
},
formatDecimal (num, decimal) {
num = num.toString()
let index = num.indexOf('.')
if (index !== -1) {
num = num.substring(0, decimal + index + 1)
} else {
num = num.substring(0)
}
return parseFloat(num).toFixed(decimal)
},
keyup (e) {
if (isNaN(this.inputNumberValue)) {
this.inputNumberValue = ''
}
if (this.inputNumberValue === '') {
return
}
console.info('inputNumberValue', this.inputNumberValue)
// console.info('keyup::e', e)
let val = this.inputNumberValue.toString()
if (val.includes('.')) {
if (val.indexOf('.') === val.length - 1) {
// 最后一位是点 就不格式化
} else {
if (val.indexOf('.') < val.length - 2) { // 小数点后两位
this.inputNumberValue = this.formatDecimal(Number(val), 2).toString()
} else {
const last1 = val.charAt(val.length - 1)
const last2 = val.charAt(val.length - 2) + last1
if (last1 === '0' || last2 === '00') {
// 不格式化
} else {
this.inputNumberValue = Number(val).toString()
}
}
}
} else {
this.inputNumberValue = Number(val).toString()
}
},
// 最长10位 可以输入小数点后两位
// 小数点后保留2位小数的正则表达式
keydown (e) {
// console.info('e.keyCode', e.keyCode, e.target.value)
let across = this.keyList.includes(e.keyCode)
if (!across) { // 只能输入数字点和退格键
// console.info('1')
e.preventDefault()
return
}
// 点不能开头
if (e.keyCode === 110 && this.inputNumberValue === '') {
// console.info('2')
e.preventDefault()
return
}
// 有点了就不能再输入点了
if (this.inputNumberValue.toString().indexOf('.') > -1 && e.keyCode === 110) {
// console.info('3')
e.preventDefault()
return
}
if (this.inputNumberValue.length === this.maxlength && ![8, 37, 39].includes(e.keyCode)) {
// console.info('4')
e.preventDefault()
}
// let reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{0,2})?$/
// let expression1 = reg.test(this.inputNumberValue)
// let expression2 = this.inputNumberValue.length > this.maxlength
// if (!expression1 || expression2) {
// e.preventDefault()
// } else {
// this.$emit('input', this.inputNumberValue)
// }
}
},
watch: {
value: function (val) {
this.inputNumberValue = this.value.toString()
},
inputNumberValue: function (val) {
this.$emit('input', val)
}
},
created () { },
mounted () {
// console.info('InputNumberZen::value', this.value)
this.inputNumberValue = this.value.toString()
}
}
</script> <style>
</style>

InputNumberZen.vue 数字输入 支持两位小数的更多相关文章

  1. jQuery Validate自定义金钱验证,是否为金额格式,保留两位小数,并支持千分制货币格式

    //自定义函数实现 isMoney: function (value, element){ // return this.optional(element) || /(^[1-9]([0-9]+)?( ...

  2. element-ui表格列金额显示两位小数

    对于金额的显示,大多情况下需要保留两位小数,比如下面的(表格采用 element-ui): 在vue.js中,对文本的处理通常是通过设置一系列的过滤器,过滤器可以用在两个地方:双花括号插值 和 v-b ...

  3. Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数

    Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文    TextWatcher mTextWatcher = new Tex ...

  4. JS中格式化数据保留两位小数

    问题:在JS中格式化数据保留两位小数的函数的多种方法 最好方法: 保留两位好像是这样吧     var   a   =   9.39393;     alert(a.toFixed(2)); 说明: ...

  5. 数字千分位处理,number.js,js保留两位,整数强制保留两位小数

    杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 官方文档:https://www.customd.com/articles/14/jquery-number-format-redux 1.千分位 $. ...

  6. 公共的强制保留两位小数的js方法

    强制保留两位小数的js方法 //写一个公共的强制保留两位小数的js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f)) { ...

  7. javascript实现保留两位小数的多种方法

    第一种方法:javascript实现保留两位小数一位自动补零代码实例:第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先 ...

  8. java使double保留两位小数的多方法 java保留两位小数

    这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    d ...

  9. js保留两位小数

    js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入   保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...

  10. JS限制input输入的为数字并且有小数的时候最多保留两位小数

    JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...

随机推荐

  1. 21.6 Python 构建ARP中间人数据包

    ARP中间人攻击(ARP spoofing)是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假ARP响应包,使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改 ...

  2. uni-app接口请求封装

    首先根目录下新建文件夹取名随意,这里我取名common(意为:常见的.共有的) 然后新建request.js文件,贴入以下代码 let server_url = ''; //请求根路径(服务器地址) ...

  3. P9247 [集训队互测 2018] 完美的队列题解

    题目链接:[集训队互测 2018] 完美的队列 神仙数据结构题,看了很多题解才搞懂.在做此题之前,最好对分块很熟悉,对各类标记非常熟练.考虑题意说的种类是相对于全局的.我们可以考虑局部影响对全局影响. ...

  4. ASCII、Unicode、UTF8 10年后,史无前例,自己用js实现《专题3》

    我自己史无前例的开发了一个网页小工具,可以利用这个工具 直接查询到 一个字符的unicode二进制的定义,和utf8格式下内存中 存储的二进制. =========================== ...

  5. Build 和 Compile 区别

  6. typora beta版本 typora免费版 typora 0.11.18 下载

    壹 ❀ 引 typora从1.0.0正式版开始就不再免费了,可能有一些开了自动检测更新的同学,在某次打开typora就看到了购买以及试用天数的弹窗,但typora正式之前的beta版依旧免费,这里就分 ...

  7. 【Unity3D】UGUI之Toggle

    1 Toggle属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Toggle 控件,即可创建 Toggle 控件,选中创建的 Toggle 控件,按键盘[T]键,可以调整 Tog ...

  8. 【OpenGL ES】基于ValueAnimator的旋转、平移、缩放动效

    1 前言 ​ ValueAnimator 基于 Choreographer 的 frame callback 机制,周期性(约16.7ms,与屏幕帧率相关)执行其 doAnimationFrame() ...

  9. Java判断是否为闰年

    题目: 判断一个输入的整数是否为闰年? 1.需要对输入的数据类型进行验证 2.支持多次输入和结束符号判断,例如输入q代表退出程序. 分析: 闰年的判断规则如下: (1)若某个年份能被4整除但不能被10 ...

  10. Java并发编程实例--5.线程睡眠

    有时候我们需要让线程在一段时间内不做任何事.例如某线程每个一小时检测一下传感器,剩余的时间不做任何事. 我们可以使用sleep()方法使线程睡眠,此期间不占用计算机资源. 这个方法接受一个整数表示睡眠 ...