自定义转换数值单位、解决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
}