You need to enable JavaScript to run this app. PHP gmp_init与JS BigInt处理超长16进制数结果不一致如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

PHP gmp_init与JS BigInt处理超长16进制数结果不一致如何解决?

问题根因
  • 差异本质是JavaScript端用法错误导致,和PHP的gmp扩展无关。
  • JS中直接书写的0x开头超长16进制会优先被解析为Number类型(双精度浮点数),该类型仅支持最多53位有效整数精度,对应16进制位数约13位,这就是13位以内结果一致的原因。超过13位的16进制数字字面量会先发生精度丢失,再转成BigInt时错误已经产生,和PHP端精确解析的结果自然不一致。
解决方法

两侧都统一传入字符串形式的16进制值,不要直接传入数字字面量即可得到完全一致的结果:

  1. JavaScript正确写法
// 把16进制值放在引号中作为字符串传入,BigInt会直接按字符串精确解析
const res = BigInt("0x400000000328923310a4110a1044210210a4190810c431061064190610a51102")
  1. PHP对应写法
// 同样传入带0x前缀的字符串,gmp_init会自动识别16进制做精确解析
$res = gmp_init("0x400000000328923310a4110a1044210210a4190810c431061064190610a51102");
// 输出十进制字符串可使用gmp_strval,结果和JS侧完全一致
echo gmp_strval($res);

内容的提问来源于stack exchange,提问作者Oussama Nm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:57:00