输入金额控制,保留两位小数
/**
* 输入金额控制
* 输入的金额 amount
* 精确小数点前n位(不传n位,默认为小数点前6位,6位为十万元) num
* 金额控制小数点后默认2位,可随需求进行更改
*/
function amountRestrict(amount, num) {
// 三元运算符 是否传入小数点前n位 没有默认赋值6位
let digitNum = num ? num : 6
// 第一步先转换传入的金额为字符串类型
let sumAmount = amount.toString();
//第一位输入的 .
if (sumAmount.indexOf('.') == 0) {
sumAmount = 0 + sumAmount; //则输出 0.
return sumAmount; // 第一位输入的就是点 后面无需执行
}
//如果输入的0.00
if (sumAmount == '0.00') {
sumAmount = '0.01'; //则输出0.01
return sumAmount; // 输入的是0.00 直接输出0.01 后面无需执行
}
// 正则判断金额
sumAmount = sumAmount.replace(/[^\d.]/g, ""); // 清除 数字 和 . 以外的字符
sumAmount = sumAmount.replace(/\.{2,}/g, "."); // 只保留第一个. 清除多余的
sumAmount = sumAmount.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); // 删除多余的 .
sumAmount = sumAmount.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); // 只能输入两个小数
// 判断金额中是否有小数点 并且 金额 不为空
if (sumAmount.indexOf(".") < 0 && sumAmount != "") {
sumAmount = parseFloat(sumAmount.slice(0, digitNum)); // 没有小数点并且金额不为空 切割 0 至 digitNum 位 并且输出数字类型
} else { // 有小数点
// 判断金额第0位至小数点的位置是否为0 金额的第一位是否为 0 此意为输入完成后又点击到第一位输入0
if (sumAmount.slice(0, sumAmount.indexOf(".")) != '0' && sumAmount.slice(0, 1) == '0') {
sumAmount = sumAmount.slice(1, sumAmount.length); // 进入这说明 第0位数字为0 那就从1位截取到最后
}
// 判断小数点的位置是否 大于 digitNum 位
if (sumAmount.indexOf(".") > digitNum) {
// 如果大于digitNum位就切割0至digitNum位,拼接小数点后两位 并且输出数字类型
sumAmount = parseFloat(sumAmount.slice(0, digitNum) + sumAmount.slice(sumAmount.indexOf("."), sumAmount.length));
}
}
return sumAmount;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律