在 Javascript 中添加或减去 64 位整数 [英] Add or Subtract From 64bit Integer in Javascript
问题描述
是否有一种简单的方法(希望有一个小函数,而不是库)在 JavaScript 中对 64 位整数进行加减运算?
Is there a simple way (hoping for a small function, not a library) to add or subtract from a 64bit integer in JavaScript?
示例 64 位整数:291270990346989568
Example 64bit int: 291270990346989568
背景:我正在使用具有 64 位推文 ID 的 Twitter API.我想从这些 ID 中添加或减去一个,以操纵我从 Twitter 返回的结果.
Background: I am working with the Twitter API which has 64bit tweet ID's. I'd like to add or subtract one from those IDs to manipulate what results I get back from Twitter.
推荐答案
以下代码执行您所描述的操作.
The following code does what you've described.
拆分、加法或减法,然后重新合并...
Splitting, adding or subtracting, then re-joining...
此代码具有递增和递减函数,以及带有一些边缘情况的测试函数.在拆分数字字符串并对其进行数学运算时,您需要考虑前导零"会发生什么,因此有一个填充函数.
This code has both increment and decrement functions, and a test function with some edge cases. When splitting number strings and doing math on them, you need to consider what happens to "leading zeroes", so there's a padding function for that.
感谢 Justin 提供 JSFiddle 与此解决方案.
Thanks, Justin, for providing a JSFiddle with this solution.
/*
* Prepend zeros to expand a given string to given length
*
* @var {String} numStr Number
* @var {Number} len Length to pad out to
*
* @returns {String}
*/
function pad0 (numStr,len) {
while (numStr.length < len) {
numStr = "0" + numStr;
}
return numStr
}
/*
* Decrement the given (64 bit) integer.
*
* @var {String} int64 Postive non-zero integer, as a string
*
* @returns {String}
*/
function decrInt64 (int64) {
var result = "";
var midpt = Math.floor(int64.length/2);
var upper = int64.substring(0,midpt);
var lower = int64.substring(midpt);
var upperVal = new Number(upper);
var lowerVal = new Number(lower);
if (lowerVal == 0) {
if (upperVal == 0) {
// We don't support negative numbers
result = "*ERROR*"
}
else {
// borrow 1
result = pad0((--upperVal).toString(),upper.length) +
(new Number("1"+lower) - 1).toString();
}
}
else {
var newLower = (lowerVal - 1).toString();
result = upper + pad0(newLower,lower.length);
}
alert(result);
}
/*
* Increment the given (64 bit) integer.
*
* @var {String} int64 Postive, as a string
*
* @returns {String}
*/
function incrInt64 (int64) {
var result = "";
var midpt = Math.floor(int64.length/2);
var upper = int64.substring(0,midpt);
var lower = int64.substring(midpt);
var upperVal = new Number(upper);
var lowerVal = new Number(lower);
var newLower = (++lowerVal).toString();
// Did we overflow?
if (lower.length < newLower.length) {
// Yes, carry the 1
result = (++upperVal).toString() + newLower.substring(1);
}
else {
result = upper + pad0(newLower,lower.length);
}
alert(result);
}
// Test function
window.displaymessage= function ()
{
decrInt64("291270990046989568");
incrInt64("291270990046989568");
decrInt64("000000000000000000");
incrInt64("000000000000000000");
decrInt64("000000001000000000");
incrInt64("000000001000000000");
decrInt64("099999999999999999");
incrInt64("099999999999999999");
decrInt64("999999999999999999");
incrInt64("999999999999999999");
}
这篇关于在 Javascript 中添加或减去 64 位整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!