如何使用filter_var_array过滤浮点数

时间:2017-02-10 15:31:56

标签: php

我在过滤具有浮点值的csv文件时遇到问题。以下是我所做的一个例子:

<?php
$data = array(0.152,20,.205);
$result = filter_var_array($data,FILTER_VALIDATE_FLOAT);
var_dump($result);
?>

如您所见,在$data数组中,第三个浮点数无效,它没有整数部分,所以我希望在$result中得到一个错误,但不幸的是,这是什么我明白了:

16:24 $ php -q script.php
array(3) {
  [0]=>
  float(0.152)
  [1]=>
  float(20)
  [2]=>
  float(0.205)
}

过滤器通过在点之前添加0来校正浮点数。这没有帮助,因为从一开始该值不正确。怎么避免这个?

::编辑::

如果我使用此过滤器:FILTER_SANITIZE_NUMBER_FLOAT,我得到零:

16:28 $ php -q script.php
array(3) {
  [0]=>
  string(4) "0152"
  [1]=>
  string(2) "20"
  [2]=>
  string(4) "0205"

我不知道如何确保我不会通过残留的花车。

1 个答案:

答案 0 :(得分:2)

问题是FILTER_VALIDATE_FLOAT会将通过验证的值转换为浮点数。

.205它似乎被认为是有效的浮点因此被转换(加上前导零)

请参阅docs