javascript里,怎么将一个科学计数的数字字符串转化成整数的形式。

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);

*** 方法一:

  • /*科学计数法转换数值*/
  • function scientificToNumber(num) {
  • var str = num.toString();
  • var reg = /^(\d+)(e)([-]?\d+)$/;
  • var arr, len,
  • zero = '';
  • /*6e7或6e+7 都会自动转换数值*/
  • if (!reg.test(str)) {
  • return num;
  • } else {
  • /*6e-7 需要手动转换*/
  • arr = reg.exec(str);
  • len = Math.abs(arr[3]) - 1;
  • for (var i = 0; i < len; i++) {
  • zero += '0';
  • }
  • return '0.' + zero + arr[1];
  • }
  • }
  • 简单地说就是:
  • var str = '1234';
  • var str_float = parseFloat(str);
  • 用parseFloat() 将字符串数字转换成小数。******

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]);
}