增加或减少在Javascript中的64位整数 [英] Add or Subtract From 64bit Integer in Javascript
问题描述
有没有一种简单的方法(希望有一个小的功能,而不是一个库),以增加或减少一个64位整数的JavaScript?
Is there a simple way (hoping for a small function, not a library) to add or subtract from a 64bit integer in JavaScript?
例如64位INT:291270990346989568
Example 64bit int: 291270990346989568
背景:我正在与Twitter的API,它具有64位的tweet ID的工作。我想从这些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.
推荐答案
以下code做你所描述的东西。
The following code does what you've described.
分裂,增加或减少,然后再重新连接...
Splitting, adding or subtracting, then re-joining...
这code同时具有递增和递减功能和测试功能与一些边缘情况。当分裂数字字符串并做数学在他们身上,你需要考虑会发生什么前导零,所以这是一个填充函数,该函数。
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.
/*
* 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屋!