php - 更正浮点值

标签 php floating-point

我从 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/

相关文章:

PHP is_readable() 在可读 samba 目录上失败

c - GNU GCC 数学函数的精度要求?

c - 将十进制定点/浮点格式打印为十六进制

Ruby float 比较错误?

php - 我可以在 SQL 中使用 AND 运算符 2 次吗?

php - 关系型 MySQL - 获取属性?

php - 是否有可能 "pirate" session 变量(我不想知道如何)

php - 在一个查询中执行 UPDATE 并设置用户变量

ruby - 为什么 Ruby 中的除法返回整数而不是十进制值?

python - Pytest/假设未按预期匹配字符串