当数字变大时,JavaScript会将大型INT转换为科学记数法.我怎样才能防止这种情况发生?
是否有一个用于JavaScript或内置的bignum库,我可以包括
<script type="text/javascript" src="the_bignum_library.js"></script>
Run Code Online (Sandbox Code Playgroud)
?
我认为我的用户更愿意在网页中输入数字并等待7秒才能获得结果,而不是下载可执行文件并点击一堆"此可执行文件可能会损害您的计算机"警告屏幕进行安装.
我考虑过自己的http://github.com/silentmatt/javascript-biginteger或http://www.mainebrook.com/john/fun/euler.html.或者你会建议从JavaScript调用Java bignum库,如apfloat?
这是我面临的一个奇怪问题.当我将一些大数字传递给JS函数(自定义或内置)时,该值会自动增加1.例如,请参阅:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display an alert box.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
alert(10466511635124471);
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在我看到的警报中10466511635124472,而不是10466511635124471.有人可以解释这种行为吗?
我在FF 17.0.10和Chrome 12.0.742.122以及IE 8中检查了这个.
所以,我已经成功地编写了Fibonacci序列来创建一个array带有数字序列的序列,但我需要知道该数字的长度(多少位数)500th.
我已经尝试了下面的代码,但它找到了科学记数法的长度(22位数),而不是应该返回的正确的105.
有关如何将科学记数法转换为实际整数的任何想法?
var fiblength = function fiblength(nth) {
var temparr = [0,1];
for(var i = 2; i<=nth; i++){
var prev = temparr[temparr.length-2],
cur = temparr[temparr.length-1],
next = prev + cur;
temparr.push(next);
}
var final = temparr[temparr.length-1].toString().length;
console.log(temparr[temparr.length-1]);
return final;
};
a = fiblength(500);
console.log(a);
Run Code Online (Sandbox Code Playgroud) 我目前正在通过 Euler 项目工作,目前我需要将一个 1000 位数字拆分为一个数组。
我试过这个:
var number = big number here;
var digits = number.toString().split('');
Run Code Online (Sandbox Code Playgroud)
它适用于小数字,但只要输入足够大,数组就会采用科学记数法,例如:
[ '1', '2', '3', '1', '2', '4', 'e', '+', '2', '2' ]
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法?
提前致谢!
编辑:欧拉项目中的问题 8 需要(https://projecteuler.net/problem=8)
我一直在尝试使用 javascript 添加以下数字;
76561197960265728+912447736
遗憾的是,由于 JavaScript 中的四舍五入,它不会得到正确的数字,我需要该数字作为字符串。
我尝试使用 substr 删除最后几位数字,然后将两个数字相加,然后将两个字符串放在一起,遗憾的是,如果第一个数字是 1,则这不起作用。
function steamid(tradelink){
var numbers = parseInt(tradelink.split('?partner=')[1].split('&')[0]),
base = '76561197960265728';
var number = parseInt(base.substr(-(numbers.toString().length + 1))) + numbers;
steamid = //put back together
}
steamid('https://steamcommunity.com/tradeoffer/new/?partner=912447736&token=qJD0Oui2');
Run Code Online (Sandbox Code Playgroud)
预期的:
76561198872713464