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始终需要小数点