You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JS中parseInt解析31位二进制串返回1,C#中却返回对应整数值

差异原因说明

核心问题是你调用JavaScript的parseInt时传入的第一个参数类型错误,而非两个语言的进制转换逻辑存在差异:

  • C#侧的执行逻辑完全符合预期:
    Convert.ToInt32(string value, int fromBase)方法第一个参数要求为字符串,你传入的是完整的31位二进制字符串"1000000000000000000000000000000",转换为十进制就是2的30次方,结果1073741824正确。
  • JavaScript侧的错误源于参数的隐式转换:
    你给parseInt传入的第一个参数是数字字面量1000000000000000000000000000000,而非字符串。JavaScript的数字类型采用IEEE 754双精度浮点数标准,能精确表示的整数最大为2^53(即9007199254740992),你写的这个数字远超该上限,JS解析时就已经丢失精度,会被自动转换为科学计数法表示的1e+30。
    而parseInt的规则是如果传入的第一个参数不是字符串,会先将其转换为字符串再处理:1e+30转为字符串后是"1e+30",parseInt解析该字符串时遇到非数字字符e就会终止解析,仅保留开头的1,再按2进制转换为十进制后结果就是1。

如果要在JavaScript中得到和C#一致的结果,只要将第一个参数改为字符串传入即可:

parseInt("1000000000000000000000000000000", 2)

执行后返回结果就是正确的1073741824。

内容的提问来源于stack exchange,提问作者Imran Qadir Baksh - Baloch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:45:05