V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
byc8888
V2EX  ›  PHP

2147483647 最大存储的数据 现在要存一个 30 亿[3,000,000,000]的数字咋办

  •  1
     
  •   byc8888 · Jan 9, 2015 · 7139 views
    This topic created in 4127 days ago, the information mentioned may be changed or developed.

    php intval(3000000000) 结果为 2147483647 怎么解决

    21 replies    2015-01-17 23:45:36 +08:00
    broadliyn
        1
    broadliyn  
       Jan 9, 2015
    字符串
    matrix32767
        2
    matrix32767  
       Jan 9, 2015
    字符串,高精度。
    liuhaotian
        3
    liuhaotian  
       Jan 9, 2015 via iPhone   ❤️ 2
    高精度。通过数组实现。为了方便可以一位1w
    具体可以百度 c++ 高精度 php改一下就好了
    byc8888
        4
    byc8888  
    OP
       Jan 9, 2015
    找到超过一亿位的梅森素数 奖你十五万美元 刚看的新闻

      据最新一期德国《探索》月刊报道,自从2013年1月美国数学家柯蒂斯?库珀找到迄今人类已知的最大梅森素数2^57885161-1(即2的57885161次方减去1,有17425170位数)以来,全球已有187个国家和地区近60万人使用超过100万台计算机联网来寻找新的更大的梅森素数。凡是第一个找到超过1亿位的梅森素数的个人或机构,将获得国际非营利性组织——电子前沿基金会(EFF)颁发的15万美元奖金。

      梅森素数是指形如2^P-1(其中指数P为素数)的特殊素数;它是以17世纪法国神学家、哲学家和数学家马林?梅森的姓氏来命名的,因为他对这种素数做了大量的研究工作。早在公元前300多年,古希腊数学家欧几里得就用反证法证明了素数有无穷多个,并提出了少量素数可写成2^P-1的形式。由于梅森素数具有许多独特的性质和无穷的魅力,千百年来一直吸引着众多数学家(包括数学大师费马、笛卡尔、莱布尼兹、哥德巴赫、欧拉、高斯、哈代、图灵等)和无数业余数学爱好者对它进行探究。近百年来人们找到的巨大素数几乎都是梅森素数。迄今为止,人类仅找到48个梅森素数;这种素数珍奇而迷人,因此被誉为“数海明珠”。
    sumhat
        5
    sumhat  
       Jan 9, 2015
    升级 64 位 CPU 和 OS
    est
        6
    est  
       Jan 9, 2015
    字符串科学计数法。1E30000
    omegaga
        7
    omegaga  
       Jan 9, 2015 via Android
    如果只是到30亿,多用一个int存高于32位的就好了吧,虽然本质上也是高精度(2^31进制),但是好写很多。
    没写过php,不过php难道没有无符号整型这种东西的???
    ykjsw
        8
    ykjsw  
       Jan 9, 2015 via iPhone   ❤️ 1
    bcmath 扩展
    lincanbin
        9
    lincanbin  
       Jan 9, 2015
    function int($s)
    {
    return($a=preg_replace('/[^\-\d]*(\-?\d*).*/','$1',$s))?$a:'0';
    }

    var_dump(int(3000000000));

    正则大法好!
    xmbaozi
        10
    xmbaozi  
       Jan 10, 2015 via iPhone
    linux 64bit无压力。
    msg7086
        11
    msg7086  
       Jan 10, 2015 via iPhone
    64位?
    feiyuanqiu
        12
    feiyuanqiu  
       Jan 10, 2015
    这不是PHP的问题,去把你数据表字段类型改成 bigint 就行了
    feiyuanqiu
        13
    feiyuanqiu  
       Jan 10, 2015
    ...我错了。
    直接用字符串存吧,运算的话就 BC_Math 类函数来做就行了
    feiyuanqiu
        14
    feiyuanqiu  
       Jan 10, 2015
    然后再补充一点。
    字符串转数字,用这个方法和 intval 的效果是一样的,并且没有溢出问题:

    $a = '3000000000' + 0;
    JackWindows
        15
    JackWindows  
       Jan 10, 2015 via iPhone
    没一个人说gmp,我也是醉了
    乃们真的用过php么?
    zhicheng
        16
    zhicheng  
       Jan 10, 2015   ❤️ 1
    我来补刀,叫你不用 Python 。
    msg7086
        17
    msg7086  
       Jan 10, 2015 via iPhone
    最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval('1000000000000') 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。[1]

    [1] http://php.net/manual/zh/function.intval.php
    mingyun
        18
    mingyun  
       Jan 11, 2015
    @JackWindows gmp还真没用过,请教一下
    JackWindows
        19
    JackWindows  
       Jan 12, 2015
    @msg7086 搜索引擎是个好东西 (言外之意就是不要再做伸手党,随随便便就能找到的东西请RTFM) http://php.net/manual/en/intro.gmp.php
    JackWindows
        20
    JackWindows  
       Jan 12, 2015
    @msg7086 回复错ID了抱歉


    @mingyun 请看上一条
    lostsnow
        21
    lostsnow  
       Jan 17, 2015
    误人子弟的还真是多

    这是因为你的php是32bit的, 就算你的cpu和os是64bit 只要你的php 是32bit 就不支持64位整数

    ps1: 话说现在还有不支持64bit的cpu吗
    ps2: 如果你用的windows的话, 用官方vc编译的php版本的话, 那么就只能使用字符串来表示了, 因为到目前为止它还不支持64bit int

    > http://windows.php.net/download/
    > x86_64 Builds
    > The x64 builds of PHP for Windows should be considered experimental, and do not yet provide 64-bit integer or large file support. Please see this post(http://marc.info/?l=php-internals&m=137002754604365&w=2) for work ongoing to improve these builds.

    ps3: 如果非要想在windows用64bit int的话, 有一个办法那就是用cygwin编译一个64bit的php(貌似也用现成的可以直接用)
    ps4: 当然linux是最佳选择 64bit os + 64bit php
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5443 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    ♥ Do have faith in what you're doing.