- 解决js计算的精度问题
分转元
const regFenToYuan = fen => {
var num = fen;
num = fen * 0.01;
num += "";
var reg = num.indexOf(".") > -1 ? /(\d{1,3})(?=(?:\d{3})+\.)/g : /(\d{1,3})(?=(?:\d{3})+$)/g;
num = num.replace(reg, "$1");
num = toDecimal2(num);
return num;
};
元转分, digit精度
const regYuanToFen = (yuan, digit) => {
var m = 0,
s1 = yuan.toString(),
s2 = digit.toString();
try {
m += s1.split(".")[1].length;
} catch (e) {}
try {
m += s2.split(".")[1].length;
} catch (e) {}
return (
(Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
Math.pow(10, m)
);
};
2、只能输入数字或小数(保留一位小数)
const onlyNonNegative = (val) => {
//清除“数字”和“.”以外的字符
val = val.replace(/[^\d.。]/g, "");
// 把。换成.
val = val.replace(/\。/g, ".");
//只保留第一个. 清除多余的
val = val.replace(/\.{2,}/g, ".");
val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
//只能输入一个小数
val = val.replace(/^(\-)*(\d+)\.(\d).*$/, '$1$2.$3');
//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02
if(val.indexOf(".") < 0 && val != "" && val > 0) {
val = parseFloat(val);
}
return val;
}
3、强制保留2位小数
// 强制保留2位小数,如:2,会在2后面补上00.即2.00
const toDecimal2 = (x) => {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x * 100) / 100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}