使用javascript缩短大量数字

时间:2013-03-15 08:40:08

标签: javascript algorithm math

我有这么大的数字:
21212202382541035306949186015338569645685453497668055588619610488832

Javascript会自动缩短它,如下所示:
2.1212202382540943e + 67

但是因为我把它放在一个固定的表格单元格中,所以我需要的数字要小于或等于11位数。

所以在例子中,如果我有前面提到的数字,它应该转换为:
〜2.1212e + 67

并且,如果数字是:

128330558031338336 它应该显示 ~1.2833e + 17

所以基本上,如果一个数字的长度超过11位,它应该开始向它添加10的幂,并开始舍入数字。

如何使用JavaScript执行此操作?

我尝试了substring(),但我在确定要显示的确切权力时遇到了问题。


修改

结束脚本如下所示:

if ( num.length > 11 ) {
    num = parseFloat( num );
    var n = '~'+ num.toExponential( 4 );
} else {
    var n = num;
}

非常感谢Black Maggie

2 个答案:

答案 0 :(得分:7)

来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toExponential

javascript中有一个toExponential()

因此,如果您希望指数表示中总共剩余11个字符, 你可以传递小数位后的数字

对于您的号码toExponential(5)

2.12122e+67可能会产生21212202382541035306949186015338569645685453497668055588619610488832

更新:从mozilla而不是w3school选择了更好的来源。谢谢@ T.J。克劳德

更新2:来源:http://www.php.net/manual/en/language.types.float.php

对于php,使用round()似乎可能强制对数字进行科学记数法转换。

答案 1 :(得分:2)

我认为在你的情况下toPrecision会更合适。

如果您的数字偏差很大,您可能需要一些技巧来适应您的表格单元格。例如,尝试使用8位有效数字,测试字符串长度,如果太长,请再次使用7,甚至6和5。

更新:好的,我用以下代码玩了一下:

num = new Number(<your num>);
alert("prec: " + num.toPrecision(5) + " exp: " + num.toExponential(4));

示例输出:

prec: 364.00 exp: 3.6400e+2
prec: 3.6435e+13 exp: 3.6435e+13

我想说这取决于你是想要总是看到指数数字还是仅在需要时看到。在前一种情况下,toPrecision()更好,因为它尽可能保留数字固定点,因此您可以在相同的字符串长度中获得更高的精度。如果你想要指数数字,那么toExponential()更好。如果你的数字总是大到指数级,那就没关系了。