浏览 3815 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-07-26
最后修改:2013-10-28
刚做一个简单的减法运算,如题 开始很所以然的认为等于0.0001,结果确不是 <?php echo 1.0001 - 1; //结果等于:9.9999999999989E-5,我和我的小伙伴们都惊呆了。。。 ?> 小数位的减法都是这样吗?当保留两位小数时,结果还是我们正常想像的那样。 <?php echo 1.01 - 1; //结果等于:0.01 ?> 那如果要进行如题的运算,该怎么办呢?php手册中有专门的方法bcsub <?php echo bcsub(1.0001 , 1, 4); //结果就等于:0.0001了。注意:后面的4,保留4位小数不能少。要不结果也就不对了 ?> 这里再提一点,再大一些的运算如14位以上的运算,这个方法也就不能用了 <?php echo bcsub(98765432101234 , 12345678901234); //14位运算结果等于:86419753200000 echo bcsub(987654321012345 , 123456789012345); //15位运算结果等于:0 ?> 最后,大家算钱的时候一定要注意了。不要到时候就悲剧了。 在这里再补充点: 1 intval的整型最大值为:2147483647 如果 <?php echo intval('2147483648'); //结果还是2147483647,所以格式化长订单号的时候不要用此参数 ?> 2 date限制的结束时间是:2038年1月19号,也就是格式化超过这个日期的时候 echo date('Y-m-d', strtotime('2038-01-20'));//结果是:1970-01-01,超过2038-01-19的日期请用,DateTime格式化 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-07-30
如果担心小数,可以把钱的单位改成分,搞定。
|
|
返回顶楼 | |
发表时间:2013-08-01
我怀疑我的存在银行的钱就是这样变少的。。。。
|
|
返回顶楼 | |
发表时间:2013-08-02
xieye 写道 如果担心小数,可以把钱的单位改成分,搞定。
把浮点型或者双精度乘以100,转成分,用整型表示,不小心就出问题,用下面的代码试试,有多少中招的 float x = 1.6f; for(int index = 1; index < 100; index++){ System.out.println((int)((x+index)*100.0)); } |
|
返回顶楼 | |
发表时间:2013-08-02
1.0001 - 1 改成 (1.0001*10000-1*10000)/10000
|
|
返回顶楼 | |
发表时间:2013-09-11
bc数学解决了一直困扰我的小数运算的问题!
|
|
返回顶楼 | |
发表时间:2013-09-11
这个问题确实相当麻烦
|
|
返回顶楼 | |