不要用等号去比较浮点数的真理

本文通过PHP示例展示了直接使用等号比较浮点数可能导致的问题,并提供了一种使用bccomp函数进行精确比较的方法。

  “不要用等号去比较浮点数”的“真理”--有时候浮点数比较不会出问题,但是并不是所有情况的浮点数比较都是对的,请看下面例子。

<?php
$sum = "12300.00";
$a   = "10000.30";
$b   =  "2000.30";
$c   =   "299.40";
 
$sum = (float) $sum;
$s = (float) ($a+$b+$c);
var_dump($sum, $s);
var_dump($sum==$s);
?>

结果是:
float(12300)
float(12300)
bool(false)


*其实要比较两个浮点数的大小,可以用bccomp(参数1,参数2,小数位)来比较。

<?php
$sum = "12300.00";
$a   = "10000.30";
$b   =  "2000.30";
$c   =   "299.40";
 
$sum = (float) $sum;
$s = (float) ($a+$b+$c);
var_dump($sum, $s);
var_dump(bccomp($sum,$s,2));
?>

结果是:
loat(12300)
float(12300)
int(0) // 0表示两个浮点数值相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值