Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将字符串转换为浮点或双精度时的精度损失_Php_Mysql - Fatal编程技术网

Php 将字符串转换为浮点或双精度时的精度损失

Php 将字符串转换为浮点或双精度时的精度损失,php,mysql,Php,Mysql,我是PHP新手,我面临这个问题: $val = "13.0074809789657"; echo "$val"."<br>"; echo "number_format(\$val, 16,'.',''):" . number_format($val, 16,'.',''); echo "<br>"; echo "number_format(\$val):" . number_format($val); echo "<br>"; echo "floatval(\

我是PHP新手,我面临这个问题:

$val = "13.0074809789657";
echo "$val"."<br>";
echo "number_format(\$val, 16,'.',''):" . number_format($val, 16,'.','');
echo "<br>";
echo "number_format(\$val):" . number_format($val);
echo "<br>";
echo "floatval(\$val):" . floatval($val);
echo "<br>";
echo "doubleval(\$val):" . doubleval($val);

由于我需要在MySQL数据库中存储val(在定义为
DECIMAL(32,16)
的列中),所以我需要一种方法来精确获取
13.0074809789657
,以及所有的小数,或者一种方法来添加尾随的0,但不知道如何存储。

我建议您特别阅读关于您请求的16位小数的部分,但是您提供的数字只有13,所以PHP用字符串最接近的实际浮点表示形式填充了额外的3。对待浮子和博格一样。“我们是博格的浮点数。精度无关紧要。您将得到近似值”。这在php.ini->中决定;以浮点数显示的有效位数;precision=14好的,那么我最好将它们作为字符串使用,因为我使用它们是为了比较?
13.0074809789657
number_format($val, 16,'.',''):13.0074809789657007 //-->why adding trailing 007? This changes from time to time
number_format($val):13
floatval($val):13.007480979 //--> precision loss here: where are the other trailing decimals?
doubleval($val):13.007480979 //--> precision loss here: where are the other trailing decimals?