3

我有这么大的数字:
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;
}

非常感谢黑玛姬

4

2 回答 2

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 中选择了更好的来源。谢谢@TJ克劳德

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

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

于 2013-03-15T08:42:17.893 回答
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() 更好。如果你的数字总是大到足以成指数,那没关系。

于 2013-03-15T08:48:07.000 回答