我从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
函数。有什么建议 ?欣赏它。
答案 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