可以百度js在线运行,把js代码复制进去,进行运行打印结果测试
1.控制,只能输入多少位小数
/**
* 对输入金额进行校验
* obj 输入框对象
* 比如在input元素中,写onkeyup="moneyValidate(this,6)"
*/
function moneyValidate(obj,decimal){
obj.value = obj.value.replace(/[^\d.]/g,"");//清除"数字"和"."以外的字符
obj.value = obj.value.replace(/^\./g,"");//验证第一个字符是数字而不是字符
obj.value = obj.value.replace(/\.{2,}/g,".");//只保留第一个.清除多余的
obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
if(decimal){
var reg = new RegExp("^(\\-)*(\\d+)\\.(\\d{0,"+decimal+"}).*$");
obj.value = obj.value.replace(reg,'$1$2.$3');
}
}
2.保留小数,并向上进一位
/**
* 向上保留小数(只要目标小数位后有有效数字就进1,保证计算后的数值一定不小于原数值)
* 返回的结果,并保留fix为小数
* 比如upFixed(13.451,2)=13.46,upFixed(12,2)=12.00
* @param num
* @param fix
* @returns
*/
function upFixed(num, fix) {
// 如果是0,则返回0.00(fix位)
if(Number(num) == 0){
// return '0' + `.${Array(fix + 1).join('0')}`;
return '0' + '.'+(new Array(fix + 1).join('0'));
}
// num为原数字,fix是保留的小数位数
let result = '0';
if (Number(num) && fix > 0) { // 简单的做个判断
fix = +fix || 2;
num = num + '';
if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
result = num;
} else if (!/\./.test(num)) { // 如果没有小数点
// result = num + `.${Array(fix + 1).join('0')}`;
result = num + '.'+(new Array(fix + 1).join('0'));
} else { // 如果有小数点
// num = num + `${Array(fix + 1).join('0')}`;
num = num + (new Array(fix + 1).join('0'));
// var reg = new RegExp(`-?\\d*\\.\\d{0,${fix}}`);
var reg = new RegExp("-?\\d*\\.\\d{0,"+fix+"}");
let floorStr = reg.exec(num)[0];
if (+floorStr >= +num) {
result = floorStr;
} else {
// var floorNumber = +floorStr + +`0.${Array(fix).join('0')}1`;
var floorNumber = Number(floorStr) + Number( ('0.'+(new Array(fix).join('0'))+'1'));
var point = /\./.test(floorNumber + '') ? '' : '.'
// var floorStr2 = floorNumber + point + `${Array(fix + 1).join('0')}`;
var floorStr2 = floorNumber + point + (new Array(fix + 1).join('0'));
result = reg.exec(floorStr2)[0];
}
}
}
return result;
}
3.保留多少位小数,向下取
/**
* 向下保留小数(目标小数位后的数字直接舍弃,保证计算后的数值一定不大于原数值)
* 返回的结果,并保留fix为小数
* 比如downFixed(13.456,2)=13.45,upFixed(12,2)=12.00
* @param num
* @param fix
* @returns
*/
function downFixed (num, fix) {
// 如果是0,则返回0.00(fix位)
if(Number(num) == 0){
return '0' + '.'+(new Array(fix + 1).join('0'));
}
// num为原数字,fix是保留的小数位数
var result = '0';
if (Number(num) && fix > 0) { // 简单的做个判断
fix = +fix || 2;
num = num + '';
if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
result = num;
} else if (!/\./.test(num)) { // 如果没有小数点
// result = num + `.${Array(fix + 1).join('0')}`;
result = num + '.'+(new Array(fix + 1).join('0'));
} else { // 如果有小数点
// num = num + `${Array(fix + 1).join('0')}`;
num = num + (new Array(fix + 1).join('0'));
// var reg = new RegExp(`-?\\d*.\\d{0,${fix}}`);
var reg = new RegExp("-?\\d*.\\d{0,"+fix+"}");
result = reg.exec(num)[0];
}
}
return result;
}
1827

被折叠的 条评论
为什么被折叠?



