javascript里,怎么将一个科学计数的数字字符串转化成整数的形式。
比如说 1.23E7转换成12300000
var s='1.23E7';
eval('s='+s);
console.log(s)
可以自己定义一个函数,
var a="1.27E7";
function changeint(a){
var b=a.split("E");
var c=1;
for(var i=0;i<b[1];i++){
c*=10;
}
var result=b[0]*c;
console.log(result);
}
changeint(a);
*** 方法一:
Number('1.23E7') = 12300000
Number('1.23E7a') = NaN
精度计算的时候通常会使用 .toFixed() 方法, Number.toFixed(digits) 方法使用定点表示法来格式化一个数,会对结果进行四舍五入。参数 digits 表示小数点后数字的个数,一般介于 0 到 20 (包括)之间。
3.3e-7.toFixed(8); // "0.00000033"
3e-7.toFixed(8); // "0.00000030"
一般情况下需求小数位数是固定的,所以这个基本可以满足我们的需求。但是有些人可能不喜欢 0.00000030 这种形式,认为最后的 0 是多余的。所以索性就改进了一下:
function toNumberStr(num,digits) {
// 正则匹配小数科学记数法
if (/^(\d+(?:.\d+)?)(e)([-]?\d+)$/.test(num)) {
// 正则匹配小数点最末尾的0
var temp=/^(\d{1,}(?:,\d{3})*.(?:0*[1-9]+)?)(0*)?$/.exec(num.toFixed(digits)) ;
if(temp){
return temp[1];
}else{
return num.toFixed(digits)
}
}else{
return ""+num
}
}
toNumberStr(3.3e-7,8) // "0.00000033"
toNumberStr(3e-7,8) // "0.0000003"
toNumberStr(1.401e10,8) // "14010000000"
toNumberStr(0.0004,8) // "0.0004"
function toNonExponential(num) {
var m = num.toExponential().match(/\d(?:.(\d*))?e([+-]\d+)/);
return num.toFixed(Math.max(0, (m[1] || '').length - m[2]));
}
解析一下:
用 .toExponential() 将数字转化为科学记数法表示,匹配正则表达式 /\d(?:.(\d*))?e([+-]\d+)/ ,获取科学记数法中小数点后的字符及幂指数( e 后面的值),这样可以确定数字是几位小数。再用 toFixed() 转换成数值表示。
如下,将字符串拆分为两部分,处理一下再相乘就可以了。
function translate(str){
var arr = str.split(/e|E/);
return parseFloat(arr[0]) * Math.pow(10, arr[1]);
}