php浮点数计算比较及取整不准确解决方法

php有意思的现象,应该是很多编程语言都会有这样的现象。这个是因为计算机的本身对浮点数识别的问题.....

[php] view plaincopy

  1. $f = 0.58;
  2. var_dump(intval($f * 100 *100)); //结果5799
  3. var_dump((float)($f * 100 *100)); //结果5800
  4. echo (int)((0.1+0.7)*10);  //结果7
  5. echo (float)((0.1+0.7)*10);  //结果8

[php] view plaincopy

  1. <?php
  2. $a = 0.1;
  3. $b = 0.7;
  4. var_dump(($a + $b) == 0.8);
  5. //打印出来的值居然为 boolean false

[php] view plaincopy

  1. <?php
  2. $a = 0.1;
  3. $b = 0.7;
  4. var_dump(bcadd($a,$b,2) == 0.8);// bool true

在浮点数计算的时候,切记不要把浮点数转换成整形,否则会出现不可能预估的错误。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

时间: 2024-08-02 14:49:05

php浮点数计算比较及取整不准确解决方法的相关文章

介绍PHP取整的四种方法

PHP实现取整的问题,不仅在我们学习PHP过程中会遇到,在我们PHP面试过程中也是常见的考点之一. 下面我们结合简单的示例给大家总结介绍PHP取整的四种方法. 第一种方法:直接取整,舍弃小数,保留整数 1 2 3 4 5 6 7 <?php $num = 3.1415926; $num2 = 3.6; echo intval($num).'<br>'; echo  intval($num2); echo "<hr>"; ?> 结果如下: 3 3 第二

ServletInputStream 和FileInputStream 的区别 ServletInputStream取不到数据解决方法

最近做项目遇到的问题,现在一下: 1:实现文件上传下载 如果用到Tomcat  和HttpServlet,那么我们就要获取上传的字节流ServletInputStream.下面说一下用ServletInputStream要注意的地方. (1) 要想到的ServletInputStream中的数据,必须要从缓存区读出来. ServletInputStream ServletInputStream = request.getInputStream(); byte [] a =new byte[Ser

每个分类取5条, Sql解决方法

一.select * from(select ID,ShopClient_ID,Name,Icon,HitCount,Class1_ID,row_number() over(partition by Class1_ID order by HitCount desc)as rowindex from tab_Goods)awhere rowindex<=5 二.SELECT  * FROM tab_Goods aWHERE (SELECT count(*) FROM tab_Goods b WHE

java取整和java四舍五入方法

1 import java.math.BigDecimal; 2 import java.text.DecimalFormat; 3 4 public class TestGetInt{ 5 public static void main(String[] args){ 6 double i=2, j=2.1, k=2.5, m=2.9; 7 System.out.println("舍掉小数取整:Math.floor(2)=" + (int)Math.floor(i)); 8 Syst

javaScript中小数取整,四种方法的比较

1.parseInt:只取整数位例如:parseInt(3.7) 取整结果为:3parseInt(-1.1) 取整结果为:-1 2.Math.floor :向下去整,取大的整数例如:Math.floor(3.7) 取整结果为:4Math.floor(-1.1) 取整结果为:-1 3.Math.ceil :向上去整,取小的整数例如:Math.floor(3.7) 取整结果为:3Math.floor(-1.1) 取整结果为:-2 4.Math.round:四舍五入例如:Math.round(3.3)

java取整和java四舍五入方法 转自董俊杰

import java.math.BigDecimal; import java.text.DecimalFormat; public class TestGetInt{ public static void main(String[] args){    double i=2, j=2.1, k=2.5, m=2.9;    System.out.println("舍掉小数取整:Math.floor(2)=" + (int)Math.floor(i));    System.out.

python中取整的几种方法

#encoding:utf-8import math #向上取整print "math.ceil---"print "math.ceil(2.3) => ", math.ceil(2.3)print "math.ceil(2.6) => ", math.ceil(2.6) #向下取整print "\nmath.floor---"print "math.floor(2.3) => ", ma

JS取整的四种方法

parseInt() 该方法取整是把小数点后面小数去掉,只保留整数部分.如果要取整的数为正时,类似Math.floor();为负时,类似Math.ceil() ? Math.round() 四舍五入取整 ? Math.floor() 向下取整? 如Math.floor(1.8) 返回 1:Math.floor(-1.8) 返回 -2; ? Math.ceil()向上取整 ?如Math.ceil(1.8)返回 2:Math.ceil(-1.8) 返回 -1; 原文地址:https://blog.5

jquery中对小数进行取整、四舍五入的方法

再和大家分享一个对多位小数进行四舍五入的方法: <script language="javascript"> //对多位小数进行四舍五入 //num是要处理的数字 v为要保留的小数位数 function decimal(num,v){ var vv = Math.pow(10,v); return Math.round(num*vv)/vv; } </script> 示例: alert(decimal(2.3356,3)); //返回2.336