js 强制保留n位小数、数字计算等

文章提供了解决JavaScript中数值计算时精度丢失的函数`amend`,以及一个强制保留指定小数位数的函数`toDecimal`。这两个函数通过对数字进行特定的乘法和除法操作,确保了四则运算的准确性并能正确保留小数位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、强制保留n位小数

//强制保留n位小数,如:2保留两位小数,会在2后面小数位补上两个0,即2.00
function toDecimal(x, n) {
	if(!x) return '';
	if(!n) n = 2;
	var f = parseFloat(x);
	if (isNaN(f)) {
		return '';
	}
	var f = Math.round(x * Math.pow(10,n)) / Math.pow(10,n);
	var s = f.toString();
	var rs = s.indexOf('.');
	if (rs < 0) {
		rs = s.length;
		s += '.';
	}
	while (s.length <= rs + n) {
		s += '0';
	}
	return s;
}

2、四则运算(解决丢失精度问题)

// num1 num2传入两个值  symbol +-*/符号
function amend(num1,num2,symbol){
  var str1=num1.toString(),str2=num2.toString(),result,str1Length,str2Length
    // 解决整数没有小数点方法
    try {str1Length= str1.split('.')[1].length} catch (error) {str1Length=0}
    try {str2Length= str2.split('.')[1].length} catch (error) {str2Length=0}
    var step=Math.pow(10,Math.max(str1Length,str2Length))
    // 可以通过先乘10的倍数,然后再除
    console.log(step);
    switch (symbol) {
        case "+":
            result= (num1*step+num2*step)/step
            break;
        case "-":
            result= (num1*step-num2*step)/step
            break;
        case "*":
            result= ((num1*step)*(num2*step)) / step/step
            break;
        case "/":
            result= (num1*step)/(num2*step)
            break;
        default:
            break;
    }
    return result
    
}
console.log(amend(0.1,0.2,"+"));

3、限制input只能输入整数或浮点数

<input type="text" oninput="inputNumber(this);" />


// 限制只能输入整数或浮点数
function inputNumber(e) {
    e.value = e.value.replace(/[^\d*\.\d*]/g, '');
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值