纠正浮动值

时间:2017-02-13 13:54:01

标签: php floating-point

我从csv文件中读取了一些数据。文件中的每一行都有一个浮点值。这些值可以是:

  
      
  • .123:从句号开始,所以我需要在之前添加一个零。
  •   
  • 1,23:有一个分隔符逗号','而不是句号所以我需要改变它。
  •   
  • 1.2e3具有指数格式,因此我需要将其转换为十进制格式。
  •   

我无法使用number_format功能,因为我无法设置小数点数(浮点数不具有固定长度的小数部分,我们想要把它们当作不丢失数据的方法)。

这是我到目前为止所尝试的内容;我构建了两个函数,第一个过滤浮点数,第二个函数在过滤器返回false时纠正它们:

function validateFloat($float){
  if(!filter_var($float,FILTER_VALIDATE_FLOAT,array('flags' => FILTER_FLAG_ALLOW_FRACTION))){
    return false;
  }

}

function correctFloat($float){
  if (validateFloat($float)==false){
    $number = number_format($float,null,'.');
    str_replace($number,'',$line);
  }
}

我不知道如何构建correctFloat函数。有什么建议 ?欣赏它。

1 个答案:

答案 0 :(得分:2)

你的函数可以检查是否有逗号并获得正确的deliminator然后在任何其他情况下使用floarval

function change_format($value){
    if(is_string($value)){
        //has to be a string if using ','
        $value= str_replace(",",".",$value);
    }
    return floatval($value);
} 

echo change_format(.123) ."<br>";
echo change_format("1,23") ."<br>";
echo change_format("1.2e3");

输出:

0.123
1.23
1200