内容简介:看下面这段代码,打印结果是:再看下面这段代码,
看下面这段代码, 0.9+0.1 的相加结果与 1 进行比较
<?php
$a = 0.9;
$b = 0.1;
$total = $a + $b;
var_dump($total);
if (1 == $total) {
echo "true";
} else {
echo "false";
}
echo "\n";
if (1.0 == $total) {
echo "true";
} else {
echo "false";
}
?>
打印结果是:
float(1) true true
再看下面这段代码, 0.6+0.1+0.1+0.1+0.1 的相加结果与 1 进行比较
<?php
$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;
$total = $a + $b + $c + $d + $e;
var_dump($total);
if (1 == $total) {
echo "true";
} else {
echo "false";
}
echo "\n";
if (1.0 == $total) {
echo "true";
} else {
echo "false";
}
?>
打印结果是:
float(1) false false
为什么这两段代码结果不一样?把两段代码里面的 $total 分别以精度20位的形式打印出来 printf("%.20f\n", $total); ,结果如下:
1.00000000000000000000 0.99999999999999988898
出现这个问题是因为浮点数计算涉及精度。
看官方手册里面关于浮点数的提示,如下图所示。里面提到 永远不要比较两个浮点数是否相等
那么有什么办法可以比较两个浮点数是否相等呢?
方法一、
看如下代码示例
<?php
$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;
$epsilon = 0.00001;
$total = $a + $b + $c + $d + $e;
if(abs($total-1) < $epsilon) {
echo "true";
} else {
echo "false";
}
echo "\n";
if(abs($total-1.0) < $epsilon) {
echo "true";
} else {
echo "false";
}
?>
结果输出为:
true true
方法二、
<?php
$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;
$total = $a + $b + $c + $d + $e;
if(1.0 == round($total, 5)) {
echo "true";
} else {
echo "false";
}
?>
结果输出为:
true
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 在 Python 中判断两个浮点数的相等
- 【重温基础】18.相等性判断
- CSS Flexbox 之間距相等
- c# – 比较两个(Integer)列表是否相等
- C#相等判断实例报错分析及解决
- JS面试题之比较两个对象是否相等?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Just My Type
Simon Garfield / Profile Books / 2010-10-21 / GBP 14.99
What's your type? Suddenly everyone's obsessed with fonts. Whether you're enraged by Ikea's Verdanagate, want to know what the Beach Boys have in common with easy Jet or why it's okay to like Comic Sa......一起来看看 《Just My Type》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
SHA 加密
SHA 加密工具