php - 将字符串转换为 float 时出现奇怪的结果

标签 php floating-point

我想将字符串转换为 float ,但我遇到了一些问题。 这是我的代码

    $dataValue = $item[$data];
    $dataValue = trim($dataValue);
    var_dump($dataValue);echo "<br>";
    $dataValue = str_replace(',', '.', $dataValue);
    var_dump($dataValue);echo "<br>";
    var_dump(floatval($dataValue));echo "<br>";
    var_dump(floatval('4.02'));echo "<br>";

结果

string(7) "4,02"
string(7) "4.02"
float(4)
float(4.02)

我不明白第三个结果,为什么我有 4 而不是 4.02?

谢谢

编辑:

我的新代码:

$dataValue = $item[$data];

        echo mb_detect_encoding($dataValue) . "<br>";

        $dataValue = iconv('ASCII', 'UTF-8//TRANSLIT', $dataValue);
        $dataValue = trim($dataValue);
        $dataValue = str_replace(',', '.', $dataValue);

        echo mb_detect_encoding($dataValue) . "<br>";

        var_dump($dataValue);echo"<br >";
        $dataValue = mb_convert_encoding($dataValue, "UTF-8");
        var_dump($dataValue);echo"<br >";
        $dataValue = str_replace(',', '.', $dataValue);
        $dataValue = floatval($dataValue);
        var_dump($dataValue);echo"<br >";`

结果

ASCII
ASCII
string(7) "4.02"
string(7) "4.02"
float(4)

最佳答案

只有 4 个可见字符,但 var_dump() 声称有 7 个。我推测小数点前有一个不可见字符导致 floatval() 提前终止转换。您可以通过查看 $dataValue 内容的十六进制转储来验证这一点。

编辑:

您的字符串似乎是用 UTF-16LE 编码的。在处理之前使用 mb 或 iconv 将其转换为 ASCII/UTF-8。

关于php - 将字符串转换为 float 时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365093/

相关文章:

php - woocommerce 自定义 ajax 顶级购物车

php - 优化PHP、MYSQL社区网站性能

php - 在 WooCommerce 中使字段可选 我的帐户编辑地址

floating-point - IEEE double 中的最小次正规数

javascript - 使用正则表达式从 float 中过滤掉小数

c - 为什么 pow(-infinity, positive non-integer) +infinity?

php - Htaccess 将 URL 从一个转发到另一个

php - 查找具有多个标签的帖子

c# - 为什么第一次调用值为 11.5 的 Round(Double) 方法返回 11 而不是 12?

c++ - 添加两个对数时防止下溢