PHP真的有很多悲剧*********************************************

用户昵称不能为空 2010-08-18 05:50:49
真的很悲剧,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;//输出 12345678901200

echo "<br />";
$number4 = intval($number3);
echo $number4; // 输出 1942892530

echo '<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 />";

?>
...全文
1391 70 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
rex100 2010-09-28
  • 打赏
  • 举报
回复
方法1
$a = '1234567890123456789012345678901234567890';
$b = '1234567890123456789012345678901234567890';
bcmul($a, $b);

方法2
strsub()先切字 然后连上
hanluner 2010-09-27
  • 打赏
  • 举报
回复
出现2147483647很明显是溢出,以前我做订单号的时候溢出过。
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 k1060220963 的回复:]

哪有你说的那么多别具。真那么多的话它早就该淘汰了。我从来相信语言没有错误。有错误的是我们自己。
[/Quote]

讨论问题别带如此多的情绪。。。
ewing333 2010-09-17
  • 打赏
  • 举报
回复
大整数一般都用不到,201008180936162200本来就是一串数字的字符串,为什么硬要当作整数处理?

什么语言都有自己的优缺点,没有什么悲剧可言。PHP是弱数据类型,了解这一点就好。大数据或精度运算就用bc函数。

k1060220963 2010-09-17
  • 打赏
  • 举报
回复
哪有你说的那么多别具。真那么多的话它早就该淘汰了。我从来相信语言没有错误。有错误的是我们自己。
ycq507 2010-09-16
  • 打赏
  • 举报
回复
可能是溢出问题吧?
阿里酷巴巴 2010-09-14
  • 打赏
  • 举报
回复
应该是溢出了
zhaoyu0826 2010-09-14
  • 打赏
  • 举报
回复
学习了。
若非零落 2010-09-14
  • 打赏
  • 举报
回复
字符串能解决吧,至今没怎么涉及大数运算,不太清楚,一直用字符串。
tabris17 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 60 楼 default7 的回复:]
那貌似可以这样用了
bcuml(1234567890123456789,1);
不过很悲剧,弹出提示:调试错误:PHPDocument1 行 3 - Call to undefined function bcuml()
[/Quote]

是bcmul,谢谢
铁马渡江河 2010-08-27
  • 打赏
  • 举报
回复
占位,学习了
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 amani11 的回复:]

php没有悲剧

php支持任意大数计算加减乘除,请查手册的bc开头的几个函数

PHP code

//如上面说的,不要在页面定义,下面的数字会失真
//$number = 13981387193741938571239457123947123481239;

//这样的数字,而是要用字符串
$numberA = '1398138719374193857123945712394712……
[/Quote]
那貌似可以这样用了
bcuml(1234567890123456789,1);
不过很悲剧,弹出提示:调试错误:PHPDocument1 行 3 - Call to undefined function bcuml()



[Quote=引用 50 楼 conqweal 的回复:]

我看到你很杯具
[/Quote]
allniu 2010-08-26
  • 打赏
  • 举报
回复
intval 此函数有很多限制,有时会把前几个作为位标志,也有长度限制,PHP的int是有长度限制的。。最简单的转为数字的方式
$a = '12432423242234'+0;
此为正解;

建议多到 www.allniu.com 去看看
yk295828759 2010-08-26
  • 打赏
  • 举报
回复
<?
$t = 1234567890123456789; // 这里 不同通过GET得到的,没有双引号的

echo sprintf('%0.0f',$t).'<br/>';

$k = $t.' -- ABCEFGHIJKLMN';

echo (int)$t.'<br/>';

echo $k;//
?>

1234567890123456768
2112454912
1.2345678901235E+18 -- ABCEFGHIJKLMN
by53008749 2010-08-25
  • 打赏
  • 举报
回复
学习了。
crazyboy2005 2010-08-24
  • 打赏
  • 举报
回复
建议楼主对数据类型做深入的剖析
zgycsmb 2010-08-24
  • 打赏
  • 举报
回复
php对类型没那么强要求,
接分
amani11 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 woshiguozhongbin 的回复:]

不知道java是怎么样处理的呢???
如果integer范围不够了,就转化为float?
[/Quote]


JAVA的数据类型非常严格,byte n = 129;这样的语句编译都通不过
conqweal 2010-08-24
  • 打赏
  • 举报
回复
我看到你很杯具
tianyaxiao 2010-08-24
  • 打赏
  • 举报
回复
悲剧在于PHP的弱类型
加载更多回复(48)
现在大量网站为了追求用户体验,使用了大量使用CSS和JS文件。 而网页加载的时间大部分是消耗在资源请求部分。通过 Chrome自带调试工具,或者 Firebug 可观察到: 资源加载的等待时间经常占到总时间的 50%以上。 再比如,IE6默认只有2个下载线程!也就是说,同时只能进行2个资源请求、无论你网速有多快。 所以网页前端速度优化的一个重要项目就是:减小资源请求数。 事实上,业界有很有名气的js,css合并压缩开源程序:minify。 但悲剧的 minify 在 php5.3 , php 5.4 环境下无法使用,于是逼的我只好自己丰衣足食。 minify 比较重量级,很臃肿。它采用了将合并文件写入硬盘的方式。 本程序只是合并、压缩,直接讲合并结果发送客户端,并采用修改过期时间优化效率,最大限度减小服务器压力。 这样做法的效率就非常非常接近于 minify。 本程序碎玉压缩合并的功能俱全,但是整体及其轻量级,很容易更新、维护,二次开发。 本程序压缩后的大小大约为压缩前的 15% - 30% 左右(平均值)。推荐使用 YSlow 进行另外方面的优化。 如果您在使用中,发现任何 Bug ,请给我反馈,谢谢。 Javascript 代码压缩 网址 : http://julying.com/lab/compress-js-css/ 类型: 原创脚本 作者: 王子墨 邮箱 : i@julying.com 发布 : 2012-06-10 22:28 更新 : 2012-07-22 12:50 版权所有 2012 | julying.com 此插件遵循 MIT、GPL2、GNU 许可. 版权:Copyright (c) julying 版权所有,本程序为开源程序(开放源代码)。 http://julying.com/code/license/ 此程序会自动去除 注释,并且会对文件名进行安全检测、去重复、存在判定等操作,只允许 .js/.css 文件,并且不允许包含远程文件。 环境要求: >= PHP 5 压缩多个 js 方法: [removed] [removed] 压缩多个 CSS 方法: <link rel="stylesheet" media="all" href="http://julying.com/lab/compress-js-css/file=/lab/coffee/layerImages/layer.css,/lab/coffee/css/main.css"> </link> / 建议查看可看 《Yahoo工程师的前端优化建议--英文原版》. 如果英文阅读不是很流畅,请查看翻译版本: 《Yahoo工程师的前端优化建议-- 中文翻译版》 《Yahoo工程师的前端优化建议-- 中文翻译版》

21,892

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧