与 Js 中的 bigint() 相比,为什么在 PHP 中使用 gmp_init() 时会得到不同的值
Why do i get different value when i use gmp_init() in PHP , compared with bigint() in Js
我被这个问题困扰了 2 天。
当我在 Javascript 中使用 bigint() 和在 php 中使用 gmp_init() 时,我得到了相同的输出,但前提是输入在 0x 之后小于 13 个 chiffre。
当我在 javascript 中使用 BigInt() 函数时,与输入超过 13 个 chiffre :
BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102)
我得到这个输出:
28948022309661678603302180203248060948583747460481826940765458987714326036480n
当我在 php[=39 中使用 gmp_init() 时=] 使用相同的输入我得到另一个输出
gmp_init(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102)
我得到这个输出:(但它在前 16 个 Chiffre 之后有所不同)
28948022309661675709966313502906776944636064151207602940776381119786782101762
我的目标是在 js 中使用 PHP
获得与 BigInt() 相同的结果
在您的示例中,您使用十六进制格式的整数初始化 Javascript BigInt。数量超过了Javascript的最大值,所以存储的值不正确。
如果您使用字符串初始化您的 BigInt,或者使用 n
的 BigInt 后缀为您的数字添加后缀,那么您将获得与 PHP returns.[=13= 相同的值]
// Initialise with integer in hex format (wrong!)
let a = BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102);
console.log(a.toString(10));
// Initialise with hex integer in BigInt format
let b = BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102n);
console.log(b.toString(10));
// Initialise with hex integer as string
let c = BigInt('0x400000000328923310a4110a1044210210a4190810c431061064190610a51102');
console.log(c.toString(10));
输出
28948022309661678603302180203248060948583747460481826940765458987714326036480
28948022309661675709966313502906776944636064151207602940776381119786782101762
28948022309661675709966313502906776944636064151207602940776381119786782101762
我被这个问题困扰了 2 天。
当我在 Javascript 中使用 bigint() 和在 php 中使用 gmp_init() 时,我得到了相同的输出,但前提是输入在 0x 之后小于 13 个 chiffre。
当我在 javascript 中使用 BigInt() 函数时,与输入超过 13 个 chiffre :
BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102)
我得到这个输出:
28948022309661678603302180203248060948583747460481826940765458987714326036480n
当我在 php[=39 中使用 gmp_init() 时=] 使用相同的输入我得到另一个输出
gmp_init(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102)
我得到这个输出:(但它在前 16 个 Chiffre 之后有所不同)
28948022309661675709966313502906776944636064151207602940776381119786782101762
我的目标是在 js 中使用 PHP
获得与 BigInt() 相同的结果在您的示例中,您使用十六进制格式的整数初始化 Javascript BigInt。数量超过了Javascript的最大值,所以存储的值不正确。
如果您使用字符串初始化您的 BigInt,或者使用 n
的 BigInt 后缀为您的数字添加后缀,那么您将获得与 PHP returns.[=13= 相同的值]
// Initialise with integer in hex format (wrong!)
let a = BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102);
console.log(a.toString(10));
// Initialise with hex integer in BigInt format
let b = BigInt(0x400000000328923310a4110a1044210210a4190810c431061064190610a51102n);
console.log(b.toString(10));
// Initialise with hex integer as string
let c = BigInt('0x400000000328923310a4110a1044210210a4190810c431061064190610a51102');
console.log(c.toString(10));
输出
28948022309661678603302180203248060948583747460481826940765458987714326036480
28948022309661675709966313502906776944636064151207602940776381119786782101762
28948022309661675709966313502906776944636064151207602940776381119786782101762