InputNumberZen.vue 数字输入 支持两位小数
<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 数字输入 支持两位小数的更多相关文章
- jQuery Validate自定义金钱验证,是否为金额格式,保留两位小数,并支持千分制货币格式
//自定义函数实现 isMoney: function (value, element){ // return this.optional(element) || /(^[1-9]([0-9]+)?( ...
- element-ui表格列金额显示两位小数
对于金额的显示,大多情况下需要保留两位小数,比如下面的(表格采用 element-ui): 在vue.js中,对文本的处理通常是通过设置一系列的过滤器,过滤器可以用在两个地方:双花括号插值 和 v-b ...
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文 TextWatcher mTextWatcher = new Tex ...
- JS中格式化数据保留两位小数
问题:在JS中格式化数据保留两位小数的函数的多种方法 最好方法: 保留两位好像是这样吧 var a = 9.39393; alert(a.toFixed(2)); 说明: ...
- 数字千分位处理,number.js,js保留两位,整数强制保留两位小数
杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 官方文档:https://www.customd.com/articles/14/jquery-number-format-redux 1.千分位 $. ...
- 公共的强制保留两位小数的js方法
强制保留两位小数的js方法 //写一个公共的强制保留两位小数的js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f)) { ...
- javascript实现保留两位小数的多种方法
第一种方法:javascript实现保留两位小数一位自动补零代码实例:第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先 ...
- java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
- js保留两位小数
js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入 保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...
- JS限制input输入的为数字并且有小数的时候最多保留两位小数
JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...
随机推荐
- MySQL创建, 修改,删除用户密码
MySQL创建, 修改,删除用户密码 创建用新户名密码 创建用新户名密码: create user 'test1'@'localhost' identified by 'test1'; 修改用户名密码 ...
- 设计模式-2 简单工厂模式Factory Method
设计模式-2 简单工厂模式 1 意图: 定义一个用户创建对象的接口,让子类决定实例化那个类.Factory Method使一个类的实例化延迟到其子类 使用场景:将一个类的实例化延迟到其子类结构: 优缺 ...
- 【STL源码剖析】list::sort真的好用吗?Centos7-Linux环境g++Release下vector数组排序和list排序效率测试【超详细的注释和解释】
说在前面的话 在使用C++的标准模板库的一些容器时,我们难免会遇到给序列排序的问题. 在学习list的时候,我们可能会了解到,algorithm::sort其实不是万能的. 当我们要给list排序的时 ...
- static_cast, dynamic_cast与reinterpret_cast的区别
在C++中,static_cast, dynamic_cast和reinterpret_cast都可用于类型转换,它们在具体使用时有什么区别?此外,更为重要的是,为什么不推荐使用强制类型转换? 1. ...
- Flink-postgres-cdc实时同步报错:无法访问文件 "decoderbufs": 没有那个文件或目录
问题描述 Caused by: org.postgresql.util.PSQLException: 错误: 无法访问文件 "decoderbufs": 没有那个文件或目录 解决办 ...
- CF1916
重点在 E B 如果 \(lcm(a,b)\neq b\),则是一个答案. 否则答案是 \(b\times\frac{b}{a}\). C 先前缀和.设前缀和 \(s_i\).考虑 \(s_i\) 减 ...
- 从零开始的react入门教程(七),react中的状态提升,我们为什么需要使用redux
壹 ❀ 引 在前面的文章中,我们了解到react中的数据由props与State构成,数据就像瀑布中的水自上而下流动,属于单向数据流.而这两者的区别也很简单,对于一个组件而言,如果说props是外部传 ...
- python 中记录dmesg信息并进行分析的方法(@)
在Python中记录系统的dmesg 信息,并进行分析的方法简述: 基本命令: dmesg -C 清除之前的dmesg 信息: dmesg -T > testExample.msg ...
- 基于python+mysql的宠物领养网站系统
功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发. 整个平台包括前台和后台两个部分. 前台功能包括:首页.宠物详情页.用户中心模块. 后台功能包 ...
- 适用于Spring Boot Jar的启停部署脚本
shell脚本参数 使用-z或-n对一个变量判空时, 若直接使用[ -n ARG ]这种形式,当{ARG}中有空格将会报错, line 27: [: sd: binary operator expec ...