问题描述:
有用到这样段代码,就是两个浮点数相减
$this->discount = floatval($this->discount - $waybill['total_price']);
其中$this->discount
和$waybill['total_price']
都是浮点数,值为float(202.6)
,理论上应该得到0,程序得到的结果却是float(5.6843418860808E-14)
问题原因
这是由于PHP的浮点数精度计算问题,在PHP计算过程中其实有隐藏的小数。
解决方案
浮点数都用round()
函数取相同位数的小数,然后再进行计算,如下:
$this->discount = floatval(round($this->discount,4) - round($waybill['total_price'],4));