我需要一个PHP函数,它将接受一个浮点数并将其向下舍入到最接近的一半(x.0或x.5)。我发现了其他函数,将四舍五入到最近的分数,但他们四舍五入两种方式。我需要的函数只能向下取整。
7.778 -> 7.57.501 -> 7.57.49-> 7.07.1-> 7.0
dphi5xsq1#
$x = floor($x * 2) / 2;
enxuqcxy2#
一个简单的解决方案是使用模运算符(fmod()函数),如下所示:
fmod()
function roundDown($number, $nearest){ return $number - fmod($number, $nearest); } var_dump(roundDown(7.778, 0.5)); var_dump(roundDown(7.501, 0.5)); var_dump(roundDown(7.49, 0.5)); var_dump(roundDown(7.1, 0.5));
结果是:
它的优点是,与任何最接近的数字(0.75,22.5,3.14 ...)您可以使用相同的运算符来舍入:
function roundUp($number, $nearest){ return $number + ($nearest - fmod($number, $nearest)); } var_dump(roundUp(7.778, 0.5)); var_dump(roundUp(7.501, 0.5)); var_dump(roundUp(7.49, 0.5)); var_dump(roundUp(7.1, 0.5));
hl0ma9xz3#
我假设PHP有一个floor函数:floor($num * 2) / 2应该这样做。
floor($num * 2) / 2
798qvoo84#
你可以这样做,round($number / 5, 1) * 5中的第二个参数是精度。$number等于4.6、4.8和4.75的示例
round($number / 5, 1) * 5
$number
>>> round(4.6 / 5, 1) * 5; => 4.5 >>> round(4.8 / 5, 1) * 5; => 5.0 >>> round(4.75 / 5, 1) * 5; => 5.0
如果你愿意,你也可以像round($number, 1, PHP_ROUND_HALF_DOWN)一样下载round(),查看文档了解更多信息https://www.php.net/manual/en/function.round.php
round($number, 1, PHP_ROUND_HALF_DOWN)
round()
mfpqipee5#
echo round($val*2) / 2; // Done
v9tzhpje6#
从我的工作要求。我放了一个函数来做这个。希望你能把它作为参考:
function round_half_five($no) { $no = strval($no); $no = explode('.', $no); $decimal = floatval('0.'.substr($no[1],0,2)); // cut only 2 number if($decimal > 0) { if($decimal <= 0.5) { return floatval($no[0]) + 0.5; } elseif($decimal > 0.5 && $decimal <= 0.99) { return floatval($no[0]) + 1; } } else { return floatval($no); } }
uemypmqf7#
这里是整数输入的解决方案。测试:124->100,125->150,126->150,187->200,974->950,975->1000,980->1000
function roundHalf($num) { $rounded = round($num / 50) * 50; return ($num - $rounded <= 25) ? $rounded : $rounded + 50; }
7条答案
按热度按时间dphi5xsq1#
enxuqcxy2#
一个简单的解决方案是使用模运算符(
fmod()
函数),如下所示:结果是:
它的优点是,与任何最接近的数字(0.75,22.5,3.14 ...)
您可以使用相同的运算符来舍入:
hl0ma9xz3#
我假设PHP有一个floor函数:
floor($num * 2) / 2
应该这样做。798qvoo84#
你可以这样做,
round($number / 5, 1) * 5
中的第二个参数是精度。$number
等于4.6、4.8和4.75的示例如果你愿意,你也可以像
round($number, 1, PHP_ROUND_HALF_DOWN)
一样下载round()
,查看文档了解更多信息https://www.php.net/manual/en/function.round.phpmfpqipee5#
v9tzhpje6#
从我的工作要求。我放了一个函数来做这个。希望你能把它作为参考:
uemypmqf7#
这里是整数输入的解决方案。
测试:124->100,125->150,126->150,187->200,974->950,975->1000,980->1000