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

时间:2015-12-08 08:49:22

标签: javascript scientific-notation

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

不幸的是,toPrecision仅适用于1e-6到1e20的范围,我确实有1e-7和1e-10等数字。

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

我尝试使用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

到目前为止没有任何工作。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

所以我无法找到真正的解决方案。我知道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
}