V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
byc8888
V2EX  ›  PHP

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

  •  1
     
  •   byc8888 · 2015-01-09 21:15:33 +08:00 · 6673 次点击
    这是一个创建于 3611 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

      据最新一期德国《探索》月刊报道,自从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  
       2015-01-09 21:49:48 +08:00
    升级 64 位 CPU 和 OS
    est
        6
    est  
       2015-01-09 21:53:09 +08:00
    字符串科学计数法。1E30000
    omegaga
        7
    omegaga  
       2015-01-09 21:53:43 +08:00 via Android
    如果只是到30亿,多用一个int存高于32位的就好了吧,虽然本质上也是高精度(2^31进制),但是好写很多。
    没写过php,不过php难道没有无符号整型这种东西的???
    ykjsw
        8
    ykjsw  
       2015-01-09 23:17:45 +08:00 via iPhone   ❤️ 1
    bcmath 扩展
    lincanbin
        9
    lincanbin  
       2015-01-09 23:22:18 +08:00
    function int($s)
    {
    return($a=preg_replace('/[^\-\d]*(\-?\d*).*/','$1',$s))?$a:'0';
    }

    var_dump(int(3000000000));

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

    $a = '3000000000' + 0;
    JackWindows
        15
    JackWindows  
       2015-01-10 12:40:53 +08:00 via iPhone
    没一个人说gmp,我也是醉了
    乃们真的用过php么?
    zhicheng
        16
    zhicheng  
       2015-01-10 14:09:13 +08:00   ❤️ 1
    我来补刀,叫你不用 Python 。
    msg7086
        17
    msg7086  
       2015-01-10 20:56:12 +08:00 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  
       2015-01-11 20:59:00 +08:00
    @JackWindows gmp还真没用过,请教一下
    JackWindows
        19
    JackWindows  
       2015-01-12 01:49:27 +08:00
    @msg7086 搜索引擎是个好东西 (言外之意就是不要再做伸手党,随随便便就能找到的东西请RTFM) http://php.net/manual/en/intro.gmp.php
    JackWindows
        20
    JackWindows  
       2015-01-12 01:50:14 +08:00
    @msg7086 回复错ID了抱歉


    @mingyun 请看上一条
    lostsnow
        21
    lostsnow  
       2015-01-17 23:45:36 +08:00
    误人子弟的还真是多

    这是因为你的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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1377 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.