2017-02-13 34 views
2

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

  • 0.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功能。有什么建议么 ?欣赏它。

回答

2

你的功能,可以检查是否有一个逗号,并得到那么正确deliminator在任何其他情况下

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"); 

输出使用floarval:

0.123 
1.23 
1200 
+0

冷静,如果开头是什么“” ? – Somar

+0

floatval填充它。使用更新我刚刚拼错'$价值'很多... – nerdlyist

+0

这太棒了!谢谢。 – Somar