我有这么大的数字:
的 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
答案 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()更好。如果你的数字总是大到指数级,那就没关系了。