jef*_*kee 14 php floating-point
可能重复:
我应该如何进行浮点比较?
php整数和浮点数比较不匹配
我有两个变量,$_REQUEST['amount']并且$carttotal,在电子商务的事情.当然,它们在尝试处理付款时应该匹配,以防止在最后一分钟手动覆盖支付金额,或者当然是计算错误.
然而:
$carttotal = $carttotal * 1;
$_REQUEST['amount'] = $_REQUEST['amount'] * 1;
if($carttotal != $_REQUEST['amount']) {
$code = 0; // cart empty under this user - cannot process payment!!!
$message = 'The cart total of ' . $carttotal . ' does not match ' . $_REQUEST['amount'] . '. Cannot process payment.';
$amount = $carttotal;
$json = array('code' => $code,
'message' => $message,
'amount' => $amount);
die(json_encode($json));
} else {
$trnOrderNumber = $client->id . '-' . $carttotal;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码,通过相同的数字,并没有给我平等.基本上我得到的错误信息就好像$carttotal != $_REQUEST['amount']是true(不等的变量).
所以为了测试变量,我偷偷溜进来:
var_dump($_REQUEST['amount']);
var_dump($carttotal);
Run Code Online (Sandbox Code Playgroud)
要查看发生了什么(在我进行* 1计算之后确保将它们作为浮点数处理,而不是字符串处理).
我收到了这个:
float(168.57)
float(168.57)
Run Code Online (Sandbox Code Playgroud)
非常非常令人沮丧.可能是什么导致了这个?
浮点数不是100%准确!您在PHP中的计算可能会返回10.00000000001,它不等于10.
在比较浮点数之前,请使用sprintf(http://php.net/manual/en/function.sprintf.php)格式化浮点数.
| 归档时间: |
|
| 查看次数: |
23481 次 |
| 最近记录: |