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 ...
随机推荐
- How to 充分利用你的服务器
服务器高性能计算指南 本文处于preview阶段,内容并不完全严谨,如有错误敬请原谅,适当参考. 目录 服务器高性能计算指南 什么样的计算适合当前服务器? 从CPU架构入手 两个CPU带来的影响 那么 ...
- 盘点下4个Winform UI开源控件库
今天一起来盘点下4个Winform UI开源控件库,有.Net Framework,也有.Net Core. 1.支持.Net 7的开源UI组件框架 项目简介 这是一个基于.Net Framework ...
- 基于protobuf和httplib的在线通讯录项目框架|Protobuf应用小项目
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...
- 深空物联网通信中视频流的智能多路TCP拥塞控制|文献阅读|文献分析和学习|拥塞控制|MPTCP|SVC
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...
- Spring boot 的定时任务。
@Scheduled(fixedRate=2000):上一次开始执行时间点后2秒再次执行: @Scheduled(fixedDelay=2000):上一次执行完毕时间点后2秒再次执行: @Schedu ...
- Linux服务器查看端口是否开启或占用
一.查看端口是否启用 (1)lsof -i :8080 查看8080端口被哪个进程占用 (2)netstat -lnp|grep 8080 查看8080端口被哪个进程占用 (3)ss -nlap | ...
- Pandas练习
背景介绍 本数据集包括了2015年至2017年我国36个主要一线城市.特区的一些年度数据,包括产值.人口.就业.教育.医疗.经济贸易.房地产投资等方面. 包含文件: 2015年国内主要城市年度数据.c ...
- 2023年多校联训NOIP层测试3+「SFCOI-3」Sadness Fan Club Round 3
2023年多校联训NOIP层测试3 T1 数列变换 \(10pts\) 考虑暴力,发现 \(f\) 数列进行一次变换 \(A\) ,再进行一次变换 \(B\) 后,恢复成了原数列: \(f\) 数列进 ...
- 【Unity3D】花瓣特效
1 花瓣绘制原理 如下图是实现的花瓣特效效果,为方便描述,我们将每个红色的扁状长条称为花瓣,每个花瓣中心的绿点称为花蕊,花朵的正中心称为花心. 我们在 xOz 平面上绘制花朵,假设花心为 O ...
- React虚拟DOM的理解
React虚拟DOM的理解 Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点可以将其称为VNode,用对象属性来描述节点,实际上它是一层对真实DOM的抽象,最终可以通过渲 ...