<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. 5.1 C++ STL 集合数据容器

    Set/Multiset 集合使用的是红黑树的平衡二叉检索树的数据结构,来组织泛化的元素数据,通常来说红黑树根节点每次只能衍生出两个子节点,左面的节点是小于根节点的数据集合,右面的节点是大于根节点的集 ...

  2. Postfix + Extmail 企业邮件服务器搭建

    ExtMail套件用于提供从浏览器中登录.使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面.它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的I ...

  3. 【链表】链表OJ-力扣2074. 反转偶数长度组的节点【超详细的算法解释】

    说在前面 今天博主给大家带来的是力扣上的一道链表OJ,完成这道题后,博主感觉这题覆盖了很多链表的解题思想,另外,这道题对指针的控制也是比较高的.在这里博主将这道好题分享给大家! 另外,对于链表等数据结 ...

  4. pandas教程02: 查找表中数据

      在上篇教程中,我们介绍了pandas的安装.数据的导入与导出以及删除行列的操作.这次让我们一起研究下在pandas中如何根据指定的条件查找表中数据. 1. 数据准备   这次,我们使用一张学生成绩 ...

  5. 【路由器】电信光猫中兴 F7010C 折腾记录

    目录 问题描述 解锁超管密码 前言 配置安卓抓包环境 抓包获取超管密码 IPv6 配置 光猫拨号 改用 SLAAC 路由器配置 wan6 配置 wan 配置 lan 配置 验证 参考资料 问题描述 近 ...

  6. Nebula Siwi:基于图数据库的智能问答助手思路分析

      本文重点分析 Nebula Siwi 智能问答思路,具体代码可参考[2],使用的数据集为 Basketballplayer[3].部分数据和 schema 如下所示: 一.智能问答可实现的功能 1 ...

  7. .NET Core开发实战(第31课:APIController:定义API的最佳实践)--学习笔记

    31 | APIController:定义API的最佳实践 首先看一个传统意义上三层架构定义的 Controller [HttpPost] public Task<long> Create ...

  8. 测距工具部分情况下无效的问题解决 - 高德JSAPI

    最近项目中新增了一个需求是在地图上新增一个测距工具,方便看一下距离 高德官方本身自带了有一个测距工具类的 RangingTool ,以插件的方式引入即可 问题一: 如果地图上有覆盖物的话(我这是 po ...

  9. 【译】使用.NET将WebAssembly扩展到云(一)

    原文 | Richard Lander 翻译 | 郑子铭 WebAssembly(Wasm)是一种令人兴奋的新虚拟机和(汇编)指令格式. Wasm 诞生于浏览器,是 Blazor 项目的重要组成部分. ...

  10. nginx 剔除请求参数 $args 变量中任意指定参数之万金油

    剔除任意指定参数配置 只需要修改需要剔除的参数key(如:redirectUrl) #剔除$args中的redirectUrl 参数 server { listen 80; server_name w ...