Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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 round()没有像预期的那样移动到两个位置_Php_Numbers_Rounding_Php 7 - Fatal编程技术网

PHP round()没有像预期的那样移动到两个位置

PHP round()没有像预期的那样移动到两个位置,php,numbers,rounding,php-7,Php,Numbers,Rounding,Php 7,我正在尝试对我拥有的大量数据进行舍入,但舍入似乎无法正常运行。这个的输出应该是1.53,但我得到的是1.5300000000000000266453525910037569701671600341796875 $roundMe = 1.5294000046599232067734419615590013563632965087890625; $rounded = [ 'rounded' => round($roundMe) ]; 是什么原因导致它不能输出我期望的结果 返回一个fl

我正在尝试对我拥有的大量数据进行舍入,但舍入似乎无法正常运行。这个的输出应该是
1.53
,但我得到的是
1.5300000000000000266453525910037569701671600341796875

$roundMe = 1.5294000046599232067734419615590013563632965087890625;
$rounded = [
    'rounded' => round($roundMe)
];
是什么原因导致它不能输出我期望的结果

返回一个
float
而不是
string
,因此您必须处理浮点运算及其怪癖:

根据您的具体需要,您可能想尝试一下:

…或者只是接受它(在大多数用例中它不应该是一个问题)


另外,这是一个真实再现问题的例子:
ini_set('precision', 17);
var_dump(round(1.53, 2));
ini_set('precision', 50);
var_dump(round(1.53, 2));

数字以二进制形式存储,这意味着在转换为十进制时进一步舍入和再次舍入。您使用的是什么操作系统?PHP的确切版本是什么?我刚刚用PHP7.1.14在Windows上试过这个,所有的PHP 7.1.6似乎都在Mac OS上运行。请在使用变量的地方添加代码,以及您正在使用的操作系统。@DioneiMiodutzki查看更新的帖子,我正在数组中使用它。似乎在数组之前将其设置为一个变量,然后在数组中使用该变量是可行的,但对我来说不是最优的。这是有意义的。我正在使用输出值搜索匹配的数据库,因此我只需将其转换为字符串。在这种情况下,在数据库本身上对其进行四舍五入是有意义的。
string number_format ( float $number [, int $decimals = 0 ] )
ini_set('precision', 17);
var_dump(round(1.53, 2));
ini_set('precision', 50);
var_dump(round(1.53, 2));