先把它转成数组形式,采用长整数数组表示的方法来对其进行操作。<?
$a="1234567899876543210123456789";
$arr =array();
for($i=0;$i< strlen($a);$i++)
{
$arr[]=substr($a,$i,1);
}
print_r($arr);
?>
$a="1234567899876543210123456789";
$arr =array();
for($i=0;$i< strlen($a);$i++)
{
$arr[]=substr($a,$i,1);
}
print_r($arr);
?>
$a++;
$s = "$a"; // 此时 $s 为 "85261824195982"echo $s; // 8.5261824196E+13 是正常的(php4.3.2)因为长度超过12为时将自动转为科学计数法表示你用
$s = sprintf("%20.0f",$a);
echo $s; // 将会得到85261824195982不清楚你要做什么
转换成数组倒是一个好办法
preg_match_all("/./","12345678901234567890",$ar);
print_r($ar[0]);
12345678901234567890才是数字(double类型),太长了肯定会转为字符串会以科学计数法显示楼主应该是需要大数运算的方法,例如:
function bigint_plus($a,$b)
{
$aL = strlen($a);
$bL = strlen($b);
$i = max($aL,$bL);
for($k=1;$k<=$i;$k++){
$ka = $k>$aL?$aL:-$k;
$kb = $k>$bL?$bL:-$k;
$t = substr($a,$ka,1)+substr($b,$kb,1)+$h;
$h = (strlen($t)>1)?substr($t,0,1):0;
$r = substr($t,-1,1).$r;
}
return ($h?$h:"").$r;
}
$a = "85261824195981";
$b = "1";
echo bigint_plus($a,$b);
echo "<BR>";
echo bigint_plus("324534574567856783456234523453574578","6789678945674678956893456356756789657832456");如果需要更多复杂的大数运算,可以加载bcmath扩展库,具体参考手册:
BCMath Arbitrary Precision Mathematics函数
$a++;//此时$a会自动转为数字
$s = "$a"; // 此时$s 不为 "85261824195982",因为过长导致php以科学计数法表示后转为字符串
笑话!用了科学表示法连值也变了吗?
不是笑话,并非值变了,你理解错了
$s = "$a";
这里是一个数字到字符的转换过程,数字过长了就已经会转为以科学计数法表示的字符串了如果照你说的:$s = "$a"; // 此时 $s 为 "85261824195982"
那么echo $s;绝对会显示85261824195982
你看看:
$s = "85261824195982";
echo $s;
问题已解决,
我查过manual, 上面说可以通过setype或象C一样用(string)$val进行转换,试了,还是不行。
所以将解决方法贴出来供大家参考:方法比较笨:
function NumToStr($num) {
$result = "";
while ($num > 0) {
$v = $num - floor($num / 10)*10;
$num = floor($num / 10);
$result = $v . $result;
}
return $result;
}大家可以用 8526182419598137 试试!