Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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的intval()和strval()发生了什么?_Php - Fatal编程技术网

PHP的intval()和strval()发生了什么?

PHP的intval()和strval()发生了什么?,php,Php,所以我得到了这个: $n = "19.99"; echo (int) ($n * 100); echo (int) strval($n * 100); 这将产生: 1998 1999 我就是不明白。发生了什么事$n*100是1999年的浮点,为什么它们不一样呢?浮点没有任意精度。19.99*100的结果实际上表示为1998.9999999 如果你打印出来,它将显示为1999年。斯特瓦尔就是这么做的。而int将使其向下移动。浮动没有任意精度。19.99*100的结果实际上表示为1998.99

所以我得到了这个:

$n = "19.99";

echo (int) ($n * 100);
echo (int) strval($n * 100);
这将产生:

1998
1999

我就是不明白。发生了什么事$n*100是1999年的浮点,为什么它们不一样呢?

浮点没有任意精度。19.99*100的结果实际上表示为1998.9999999


如果你打印出来,它将显示为1999年。斯特瓦尔就是这么做的。而int将使其向下移动。

浮动没有任意精度。19.99*100的结果实际上表示为1998.9999999

如果你打印出来,它将显示为1999年。斯特瓦尔就是这么做的。而int将使其落地。

同时检查

你会看到一切是如何运作的

echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9
echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
同时检查

你会看到一切是如何运作的

echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9
echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9

要将两个任意精度的数字相乘,请使用bcmul函数

echo (int)(bcmul('19.99', '100')); // 1999
echo (int)(19.99 * 100); // 1998
请注意,bcmul函数的两个操作数是字符串,因为根据:

由于PHP将浮点值转换为字符串的方式,将浮点类型的值传递给需要字符串作为操作数的BCMath函数可能不会产生预期的效果,即字符串可能采用BCMath不支持的指数表示法,小数点分隔符依赖于语言环境,而BCMath始终需要小数点


要将两个任意精度的数字相乘,请使用bcmul函数

echo (int)(bcmul('19.99', '100')); // 1999
echo (int)(19.99 * 100); // 1998
请注意,bcmul函数的两个操作数是字符串,因为根据:

由于PHP将浮点值转换为字符串的方式,将浮点类型的值传递给需要字符串作为操作数的BCMath函数可能不会产生预期的效果,即字符串可能采用BCMath不支持的指数表示法,小数点分隔符依赖于语言环境,而BCMath始终需要小数点