我想将字符串转换为 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/