将带有长变量的java函数转换为NodeJS

将带有长变量的java函数转换为NodeJS,java,node.js,long-integer,Java,Node.js,Long Integer,在Java函数中有“long”变量 public class LongToIntExample1{ public static void main(String args[]){ long l=2672558412L; int i=(int)l; System.out.println(i); } } =>输出:-1622408884 我试过如下使用NodeJS函数,但输出错误: module.exports.L

在Java函数中有“long”变量

public class LongToIntExample1{  
    public static void main(String args[]){  
        long l=2672558412L;  
        int i=(int)l;  
        System.out.println(i);  
    }
}
=>输出:-1622408884

我试过如下使用NodeJS函数,但输出错误:

module.exports.LongToIntExample1 = () => {
    var l = 2672558412n;
    var i = parseInt(l);
    console.log(i);
}
=>输出:2672558412


如何将NodeJS函数编写为具有相同输出的Java函数?

如果您阅读此答案:Java将把
long
中超过
Integer.MAX_VALUE
的部分环绕,该值将变为负值

显然,NodeJS的情况并非如此


由于long大于int,因此您试图重现的行为实际上是Java实现的一个不安全的双产品,即不检查long值是否小于
Integer.MAX_值


就我个人而言,我不会在我的程序中依赖这样的机械师,我们可以使用内置的类似于这样的函数将数字转换为32位有符号整数:

函数示例1(num){
返回(新的Int32Array([num])[0];
}
console.log(LongToIntExample1(2672558412))

console.log(LongToIntExample1(2147483647))
Integer.MAX_VALUE
是错误的减法;这可能需要数十亿次的减法运算,因此这不是一个好的解决方案。在大多数情况下,如果它大于
2x整数,那么简单的减法是不正确的。正如前面提到的答案所示,最大值
,这是一个滚动,算法会复杂得多。除此之外,
Integer.MAX_VALUE
还依赖于体系结构等等,而且不管怎样,OP基本上依赖于不安全的转换函数。正如我所说,我不会在我的程序中使用这种舍入。
Integer.MAX_VALUE
不依赖于平台;它被定义为2^31-1。正确的减法应该是2^32,但是仅仅为了从long转换为int而进行数十亿次的减法运算效率极低。