如何在 JavaScript 中将大的负科学计数法数字转换为十进制符号字符串?

7

converter_scientific_notation_to_decimal_notation('1.34E-15') 或 converter_scientific_notation_to_decimal_notation(1.34E-15)

=> '0.00000000000000134'

converter_scientific_notation_to_decimal_notation('2.54E-20') 或 converter_scientific_notation_to_decimal_notation(2.54E-20)

=> '0.000000000000000000254'

Javascript 中是否存在这样的函数?

对于大的负科学计数法数字, parseFloat 不太合适。

parseFloat('1.34E-5') => 0.0000134
parseFloat('1.34E-15') => 1.34e-15
3个回答

17

这适用于任何带有指数'E'(正或负)的正数或负数。(您可以通过在数字字符串前加上'+'将其转换为数字,或将其作为字符串方法或任何对象的方法,并调用该字符串或数字。)

Number.prototype.noExponents= function(){
    var data= String(this).split(/[eE]/);
    if(data.length== 1) return data[0]; 

    var  z= '', sign= this<0? '-':'',
    str= data[0].replace('.', ''),
    mag= Number(data[1])+ 1;

    if(mag<0){
        z= sign + '0.';
        while(mag++) z += '0';
        return z + str.replace(/^\-/,'');
    }
    mag -= str.length;  
    while(mag--) z += '0';
    return str + z;
}

var n=2.54E-20;
n.noExponents();

返回值:

"0.0000000000000000000254"

这就是我正在寻找的。谢谢!太遗憾了,Javascript没有内置函数来处理这个问题。我仍然不明白为什么parseFloat在处理大的负科学计数法数字时与处理较小的负科学计数法数字时表现不同。 - arjunaskykok

2
您可以使用toFixed方法: (1.34E-15).toFixed(18) 返回 0.000000000000001340

1
不幸的是,这对第二个例子不起作用:(2.54e-20).toFixed(20) 四舍五入了。 - Reid
3
另外,当指数大于20时,toFixed会抛出一个范围错误异常。 - RobG

0
你可以使用from-exponential模块。它很轻量化且经过充分测试。
它能够接受字符串和数字,因此在转换过程中不会失去精度。
import fromExponential from 'from-exponential';

fromExponential('1.12345678901234567890e-10'); 
// '0.00000000011234567890123456789'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接