Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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_Rounding - Fatal编程技术网

php周围的函数无法正常工作

php周围的函数无法正常工作,php,rounding,Php,Rounding,php函数round工作不正常。 我有编号0.9950。 我把代码: $num = round("0.9950", 2); 我得到1.0分?为什么?为什么我不能得到0.99?当你把0.9950四舍五入到两位小数时,你得到1.00,因为这就是四舍五入的工作原理。如果您想要一个将导致0.99的操作,那么您可能正在寻找浮点截断。将浮点数截断为小数点后两位的一种方法是乘以100,转换为整数,然后再除以100: $num = "0.9950"; $output = (int)(100*$num) / 1

php函数
round
工作不正常。 我有编号
0.9950
。 我把代码:

$num = round("0.9950", 2);
我得到1.0分?为什么?为什么我不能得到
0.99

当你把
0.9950
四舍五入到两位小数时,你得到
1.00
,因为这就是四舍五入的工作原理。如果您想要一个将导致
0.99
的操作,那么您可能正在寻找浮点截断。将浮点数截断为小数点后两位的一种方法是乘以100,转换为整数,然后再除以100:

$num = "0.9950";
$output = (int)(100*$num) / 100;
echo $output;

0.99
这个技巧之所以有效,是因为在第一步之后
0.9950
变成
99.50
,当转换为整数时,它只变成
99
,丢弃原始数字第二位小数后的所有内容。然后,我们再次除以
100
以恢复原始数字,减去我们想要截断的数字


您可以向函数中添加第三个参数,使其执行所需的操作。 您必须从以下选项中进行选择:

  • PHP四舍五入
  • PHP四舍五入
  • PHP_圆_半_偶数
  • PHP_ROUND_HALF_奇数
这些常数很容易理解,所以只需使用经过调整的常数:) 在您的示例中,要获得0.99,您需要使用:

<?php echo round("0.9950", 2, PHP_ROUND_HALF_DOWN); ?>

刚刚在。。。PHP有时看起来很有趣


查看第三个参数-mode如果要更改其行为,也可以使用
floor()
而不是强制转换。在我的示例中,我只查看小数点后的前两位数字,但是casting并不总是像预期的那样工作……但是一些看起来像十进制的一半的东西可能一次也不能转换成二进制——请参阅感谢您提供的信息,我正在研究这个主题,但是这段代码似乎处理一些无法用二进制表示的“已知”浮点数(0.1、0.2、0.7等)及其加法(例如,四舍五入0.1+0.2)。