我从 csv 文件中读取了一些数据。文件中的每一行都有一个浮点值。这些值可以是:
- .123 : starting with a period, so I need to add a zero before.
- 1,23: having a delimter comma ',' instead of period so I need to change that.
- 1.2e3 having an exponential-format so I need to convert it to decimal format.
我无法使用函数number_format
,因为我无法设置小数点的数量( float 没有固定的小数部分长度,我们想要将它们取因为他们不会丢失数据)。
这是我迄今为止尝试过的;我构建了两个函数,第一个函数过滤 float ,第二个函数在过滤器返回 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
函数。有什么建议 ?欣赏它。
最佳答案
您的函数可以检查是否有逗号并获取正确的分隔符,然后在任何其他情况下使用 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
关于php - 更正浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42205731/