真的很悲剧,PHP的特别悲剧,现在我还不清楚怎么弄。知道的人请告诉我一下。
<?
$number1 = '201008180936162200';
echo $number1;//输出 201008180936162200$number2 = 201008180936162200;
echo $number2;//输出 2.0100818093616E+017$number3 = 12345678901234;
echo $number3;//输出 12345678901200$number4 = intval($number3);
echo $number4; // 输出 1942892530//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//用到的一些地方:
//当前网址 ?id=1234567890123456789
echo $_GET['id']*1; //输出 1.2345678901235E+018
echo intval($_GET['id']); // 输出 2147483647 ,更悲剧!!
echo $_GET['id']; // 输出 1234567890123456789
?>大家可以自己测试一下:url.php<?
$number1 = '201008180936162200';
echo $number1;//输出 201008180936162200
echo "<br />";$number2 = 201008180936162200;
echo $number2;//输出 2.0100818093616E+017
echo "<br />";$number3 = 12345678901234;
echo $number3;//输出 12345678901200echo "<br />";
$number4 = intval($number3);
echo $number4; // 输出 1942892530echo '<hr />';
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//用到的一些地方:
//当前网址 ?id=1234567890123456789
echo $_GET['id']*1; //输出 1.2345678901235E+018
echo "<br />";
echo intval($_GET['id']); // 输出 2147483647 ,更悲剧!!
echo "<br />";
echo $_GET['id']; // 输出 1234567890123456789
echo "<br />";?>
<?
$number1 = '201008180936162200';
echo $number1;//输出 201008180936162200$number2 = 201008180936162200;
echo $number2;//输出 2.0100818093616E+017$number3 = 12345678901234;
echo $number3;//输出 12345678901200$number4 = intval($number3);
echo $number4; // 输出 1942892530//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//用到的一些地方:
//当前网址 ?id=1234567890123456789
echo $_GET['id']*1; //输出 1.2345678901235E+018
echo intval($_GET['id']); // 输出 2147483647 ,更悲剧!!
echo $_GET['id']; // 输出 1234567890123456789
?>大家可以自己测试一下:url.php<?
$number1 = '201008180936162200';
echo $number1;//输出 201008180936162200
echo "<br />";$number2 = 201008180936162200;
echo $number2;//输出 2.0100818093616E+017
echo "<br />";$number3 = 12345678901234;
echo $number3;//输出 12345678901200echo "<br />";
$number4 = intval($number3);
echo $number4; // 输出 1942892530echo '<hr />';
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//用到的一些地方:
//当前网址 ?id=1234567890123456789
echo $_GET['id']*1; //输出 1.2345678901235E+018
echo "<br />";
echo intval($_GET['id']); // 输出 2147483647 ,更悲剧!!
echo "<br />";
echo $_GET['id']; // 输出 1234567890123456789
echo "<br />";?>
比如
<?php
$t = 1234567890123456789; // 这里 不同通过GET得到的,没有双引号的
$k = $t.' -- ABCEFGHIJKLMN';
echo $k;// 输出 1.2345678901235E+018 -- ABCEFGHIJKLMN, 这里如何得到 1234567890123456789 -- ABCEFGHIJKLMN 呢?会有这样的情况
?>
你应该一开始就是字符串传递过来。
你这个赋值语句赋的是什么值,你知道吗?我用 var_dump($t) 看了一下,是这个:float 1.2345678901235E+18所以呀,后面的结果就顺理成章了。其实,为什么你一定要用没有引号的长整数串来做赋值呢?如果不是必须写在源程序里的常量,你一定有办法以“字符串”的形式得到这个值的呀。————————
淘宝购物也能打折?看看咘唂网就知道了 ^_^
如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。
所以整型数应该是 -2147483648 到 2147483647 区间$n = 1099511627780; //这是 pow(2, 40) 的结果
echo $n; // 1099511627780
echo $n + 1; // 1099511627780
echo $n + 10; // 1099511627790
echo $n + 6; // 1099511627790什么结论?自己下!
//如上面说的,不要在页面定义,下面的数字会失真
//$number = 13981387193741938571239457123947123481239;//这样的数字,而是要用字符串
$numberA = '13981387193741938571239457123947123481239';
$numberB = '9437519347519384571937410238471083571293857102983541';//现在,你需要对两数进行计算,比如相乘的结果echo bcmul($numberA, $numberB);
echo $number1;//以字符串输出$number2 = 201008180936162200;
echo $number2;//以科学记数法输出整数$number3 = 12345678901234;
echo $number3;//这个不知道$number4 = intval($number3);
echo $number4; // 仔细看下手册上的intval函数//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//用到的一些地方:
//当前网址 ?id=1234567890123456789
echo $_GET['id']*1; //*1后会自动转换为整数,值较大,输出也以科学记数法输出了
echo intval($_GET['id']); // 仔细看下手册上的intval函数
echo $_GET['id']; // 以字符串输出
var_dump(pow(2, 30)); //int(1073741824)
var_dump(pow(2, 31)-1); //float(2147483647)
$large_number = 2147483647;
var_dump($large_number); //int(2147483647) $large_number = 2147483648;
var_dump($large_number); //float(2147483648) 事情往往出人意料所以整型数应该是 -2147483648 到 2147483647 区间-----老大能说一下为什么是这个区间吗
我看了一下,整型为4位8字节,长度应为32
$n = 1099511627780; //这是 pow(2, 40) 的结果
var_dump($n); // float 1099511627780
var_dump($n+1); // float 1099511627781
var_dump($n+10);// float 1099511627790
var_dump($n+6); // float 1099511627786
--------
With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead.
$this->_IP = getenv("HTTP_CLIENT_IP"); return;
} elseif(getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->_IP = getenv("HTTP_X_FORWARDED_FOR"); return;
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->_IP = getenv("REMOTE_ADDR"); return;
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$this->_IP = $_SERVER['REMOTE_ADDR']; return;
} else {
$this->_IP = "0.0.0.0"; return;
}
$this->_IP = getenv("HTTP_CLIENT_IP"); return;
} elseif(getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$this->_IP = getenv("HTTP_X_FORWARDED_FOR"); return;
} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$this->_IP = getenv("REMOTE_ADDR"); return;
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$this->_IP = $_SERVER['REMOTE_ADDR']; return;
} else {
$this->_IP = "0.0.0.0"; return;
}
不好意思,搞错了
加减乘除均可通过'BC math 高精度数学函数'处理。
————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
假的
int上面有bigint,bigint上面有decimal
是和PHP有关,因为 intval(1234567890123456789) != 1234567890123456789。
看来你还没有遇到过这样的情况。<?
$s = 1234567890123456789;
if(is_numeric($s)) echo intval($s); //输出 2112454912
?>
如果integer范围不够了,就转化为float?
接分
$t = 1234567890123456789; // 这里 不同通过GET得到的,没有双引号的echo sprintf('%0.0f',$t).'<br/>';$k = $t.' -- ABCEFGHIJKLMN';echo (int)$t.'<br/>';echo $k;//
?>1234567890123456768
2112454912
1.2345678901235E+18 -- ABCEFGHIJKLMN
$a = '12432423242234'+0;
此为正解;建议多到 www.allniu.com 去看看
bcuml(1234567890123456789,1);
不过很悲剧,弹出提示:调试错误:PHPDocument1 行 3 - Call to undefined function bcuml()
$a = '1234567890123456789012345678901234567890';
$b = '1234567890123456789012345678901234567890';
bcmul($a, $b);方法2
strsub()先切字 然后连上