php - 比较浮点数的PHP问题
问题描述
有人可以帮我弄清楚为什么这个最基本的代码在 PHP 中不起作用吗?多年来一直使用 PHP,但从未见过这种情况......因为我在 sandbox.onlinephpfunctions.com 网站上对其进行了测试,所以它在每个版本的 php 上都是一致的,请参见代码片段下方的链接。
我想做的就是将一个数字与另一个数字进行比较,但是当数字包含浮点数时,事情会变得很奇怪。
<?php
$lside = 490.84;
$rside = 237.80 + 222.00 + 31.04;
if( $lside == $rside ){
echo "they are equal\n";
} else {
echo "not equal\n";
echo "rside: [$rside]\n";
echo "lside: [$lside]\n";
}
http://sandbox.onlinephpfunctions.com/code/6dee3a97f68a11e67fbaa8e5c157b827ecd47740
帮助和感谢!
编辑:这是我最终从收到的答案中解决此问题并进一步研究的方法:
<?php
$lside = 490.84;
$rside = 237.80 + 222.00 + 31.04;
if( (string)$lside == (string)$rside ){
echo "they are equal\n";
} else {
echo "not equal\n";
echo "rside: [$rside]\n";
echo "lside: [$lside]\n";
}
因此,要在 PHP 中比较两个数字,一种安全的方法是强制它们成为字符串……看图。
我进行了一些额外的测试,以确保这是真的并且似乎总是有效。所有这些都返回“好”:
if( "1" == "1" ) echo "1 - good\n";
if( "1.0" == "1" ) echo "2 - good\n";
if( "1" == "1.0" ) echo "3 - good\n";
if( "1.0" == "1.0" ) echo "4 - good\n";
if( "1.0" == "1.00000000" ) echo "5 - good\n";
if( "1.000000000000000" == "1.00000000" ) echo "6 - good\n";
if( "2" == (string)(.5+.5+1) ) echo "7 - good\n";
if( "2.000000000000000" == (string)(1+1) ) echo "8 - good\n";
if( "2.000000000000000" == (string)(1.0+1) ) echo "9 - good\n";
if( "2.4" == (string)(1.4+1) ) echo "10 - good\n";
if( "2.40000" == (string)(1.4+1) ) echo "11 - good\n";
if( "2.000000000000000" == (string)(.5+.5+1) ) echo "12 - good\n";
if( "1.5" == (string)(.5+.5+.5) ) echo "13 - good\n";
if( "1.500000000000000" == (string)(.5+.5+.5) ) echo "14 - good\n";
解决方案
推荐阅读
- php - 在php中与expressmakers支付解决方案进行交易
- python - django 用重复的 nametuple 重组
- javascript - 尽管存在记录,Mongoose findById 回调仍返回 null
- typescript - 如何将类型从 typeof T 缩小到 T
- mysql - 查询寻找目的地时的步数
- dataframe - 仅当数据框中存在列时才应用 withColumn
- perl - 哈希中的特定键值
- angular - 在angular rxjs中注入另一个服务后的订阅问题
- swiftui - SwiftUI LazyVGrid 不显示两列
- ios - 访问 Swift 包中的文件