科学记数法超出toPrecision范围怎么办

Posted

技术标签:

【中文标题】科学记数法超出toPrecision范围怎么办【英文标题】:What to do when scientific notation exceeds the toPrecision range 【发布时间】:2015-12-08 08:49:22 【问题描述】:

我想在网站上显示一些现在采用科学计数法的数字。我正在使用 toPrecision 来显示数字的正常表示法。

不幸的是 toPrecision 只能在 1e-6 到 1e20 的范围内工作,而我确实有像 1e-7 和 1e-10 这样的数字。

那么当 toPrecision 不能完成我希望它完成的工作时,我该怎么办?

我尝试使用 Number() 和 parseFloat() 甚至两者都尝试让这个数字以正常表示法显示...

var min =  1e7,
nr1 = parseFloat(Number(min).toPrecision()),
nr2 = Number(min).toPrecision(),
nr3 = min.toPrecision(),
nr4 = min.toString();

console.log(nr1); //1e-7
console.log(nr2); //1e-7
console.log(nr3); //1e-7
console.log(nr4); //1e-7

到目前为止没有任何效果。

任何帮助将不胜感激

【问题讨论】:

你试过toExponential吗? toExponential 会将正常的符号转换为科学的。结果是一样的。 你试过var min = 1e42; min.toLocaleString();吗?这会将科学记数法转换为十进制记数法。 我尝试使用 toLocaleString();没用。我创建了一个小函数来使用 toFixed 解决这个问题,它能够工作。 【参考方案1】:

所以我找不到真正的解决方案。我知道 toFixed() 确实有效,但是您需要提供您希望收到的总位数。

举例:

 var nr = 1e-7;     
 console.log(nr.toFixed(10)) //=> 0.0000001000

这也不是很好看。所以这个脚本确实有效。 但是 javascript 可能会再次搞砸。例如,我使用 D3 创建了一个图表,虽然数字以正常表示法出现,但它会再次以科学形式出现...... 所以它很脆弱……

function newToFixed(nr) 
    arr1 = (""+nr).split("e"),
    arr2 = [],
    fixedPos = null;

    //notation is already normalized
    if (arr1.length === 1)         
        return nr;
    

    /**
     * remove the + or - from the number 
     * now have the exact number digits we want to use in toFixed
     */
    if (arr1[1].indexOf("+") === 0) 
        arr2 = arr1[1].split("+");
     else 
        arr2 = arr1[1].split("-");
    

    //making sure it is a number and not a string
    fixedPos = Number(arr2[1]); 
    return nr.toFixed(fixedPos); //returns  0.0000001

【讨论】:

以上是关于科学记数法超出toPrecision范围怎么办的主要内容,如果未能解决你的问题,请参考以下文章

js怎么把科学计数法转换成数字

java代码怎么把科学计数法转换为具体数字

Python:出现“列表索引超出范围”错误;我知道为啥但不知道如何解决

软件设计师_例题

全球定位是属于哪个学科研究范围

11 JavaScript Number对象&科学记数法&范围&进制转换&溢出Infinity&NaN