php intval(3000000000) 结果为 2147483647 怎么解决
1
broadliyn 2015-01-09 21:21:11 +08:00
字符串
|
2
matrix32767 2015-01-09 21:23:25 +08:00
字符串,高精度。
|
3
liuhaotian 2015-01-09 21:24:56 +08:00 via iPhone 2
高精度。通过数组实现。为了方便可以一位1w
具体可以百度 c++ 高精度 php改一下就好了 |
4
byc8888 OP 找到超过一亿位的梅森素数 奖你十五万美元 刚看的新闻
据最新一期德国《探索》月刊报道,自从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个梅森素数;这种素数珍奇而迷人,因此被誉为“数海明珠”。 |
5
sumhat 2015-01-09 21:49:48 +08:00
升级 64 位 CPU 和 OS
|
6
est 2015-01-09 21:53:09 +08:00
字符串科学计数法。1E30000
|
7
omegaga 2015-01-09 21:53:43 +08:00 via Android
如果只是到30亿,多用一个int存高于32位的就好了吧,虽然本质上也是高精度(2^31进制),但是好写很多。
没写过php,不过php难道没有无符号整型这种东西的??? |
8
ykjsw 2015-01-09 23:17:45 +08:00 via iPhone 1
bcmath 扩展
|
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)); 正则大法好! |
10
xmbaozi 2015-01-10 01:07:53 +08:00 via iPhone
linux 64bit无压力。
|
11
msg7086 2015-01-10 06:33:44 +08:00 via iPhone
64位?
|
12
feiyuanqiu 2015-01-10 09:14:33 +08:00
这不是PHP的问题,去把你数据表字段类型改成 bigint 就行了
|
13
feiyuanqiu 2015-01-10 09:17:26 +08:00
...我错了。
直接用字符串存吧,运算的话就 BC_Math 类函数来做就行了 |
14
feiyuanqiu 2015-01-10 09:26:51 +08:00
然后再补充一点。
字符串转数字,用这个方法和 intval 的效果是一样的,并且没有溢出问题: $a = '3000000000' + 0; |
15
JackWindows 2015-01-10 12:40:53 +08:00 via iPhone
没一个人说gmp,我也是醉了
乃们真的用过php么? |
16
zhicheng 2015-01-10 14:09:13 +08:00 1
我来补刀,叫你不用 Python 。
|
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 |
18
mingyun 2015-01-11 20:59:00 +08:00
@JackWindows gmp还真没用过,请教一下
|
19
JackWindows 2015-01-12 01:49:27 +08:00
@msg7086 搜索引擎是个好东西 (言外之意就是不要再做伸手党,随随便便就能找到的东西请RTFM) http://php.net/manual/en/intro.gmp.php
|
20
JackWindows 2015-01-12 01:50:14 +08:00
|
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 |