自定义转换数值单位、解决js数字过大表现为科学计数法的问题

自定义转换数值单位、解决js数字过大表现为科学计数法的问题

下面用的TS,可以自己转为JS,我还是写一遍吧,最下面是JS,会了给我评论点赞,听到没有,臭弟弟


问题:
数字过大,表现为科学计数法,这样算单位的时候就出现了问题

这边有两个点:

  • 如果你只是为了计算转换单位,那你最好用第一种
  • 如果是只是想输出这么长的数字,不想表现为科学计数法,只能用第二种

解决:
1、最优的是自己重写个Number类,来存数字的常数和指数,然后在里面定义自己的方法来操作该值与其他值运算,像什么比较,深浅克隆什么的

2、不想用最优的方法,看代码(后面转单位你就递归,然后用String.fromCharCode,我就不写了,如果需要请评论我放上),这种会有误差,但因为数太大,这一点误差也不算什么

//TS代码:
//这是把数字转为字符串
private getFNum(numStr:string) {	
		//这边看下你那边有没有指定格式,可能没有+,所以后面改成('E')就好了
        let temp: string[] = numStr.toUpperCase().split('E+')
        if (!temp[1]) {
            return numStr;
        }
        //这边我之前有试过乘法,但是返回之后,它又给转回科学计数法了
        let tempNumStr: string = "1";	
        for (let i = 0; i < parseInt(temp[1]); i++) {
            tempNumStr += "0";
        }
        return tempNumStr;
    }

//调用上面的方法
private getXXXXX() {	
		let num: number = 1000000000000000000000;	
		//这边最好判断一下是否溢出
		 if (!isFinite(num)) {
                return "MAX";
         }
		console.log(num);	//这边输出num他就会转为1e+21,蛋疼
      	 let nStr: string = this.getFNum("" + num);	//先把num转为字符串,这种效率比num.toString()要高
      	 console.log(nStr);	//这边会输出字符串1000000000000000000000,而不是1e+21
    }
//JS代码就是简单转下嘛,不能运行自己再检查一下:
//这是把数字转为字符串
function getFNum(numStr) {	
		//这边看下你那边有没有指定格式,可能没有+,所以后面改成('E')就好了
        let temp = numStr.toUpperCase().split('E+')
        if (!temp[1]) {
            return numStr;
        }
        //这边我之前有试过乘法,但是返回之后,它又给转回科学计数法了
        let tempNumStr = "1";	
        for (let i = 0; i < parseInt(temp[1]); i++) {
            tempNumStr += "0";
        }
        return tempNumStr;
    }

//调用上面的方法
function getXXXXX() {	
		let num = 1000000000000000000000;	
		//这边最好判断一下是否溢出
		 if (!isFinite(num)) {
                return "MAX";
         }
		console.log(num);	//这边输出num他就会转为1e+21,然后你就没办法算单位了
      	 let nStr = this.getFNum("" + num);	//先把num转为字符串,这种效率比num.toString()要高
      	 console.log(nStr);	//这边会输出字符串1000000000000000000000,而不是1e+21
    }

维尼聚合工具


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值