我从数据库中获取了一些数字。我希望用这种方式对这些数字进行舍入:
Database => Round up number
34 => 0
89 => 100
421 => 400
561 => 600
4421 => 4000
6701 => 7000
45000 => 50000
91000 => 90000
132000 => 130000
有没有PHP功能呢?因此,1000以下的数字将向上舍入到最接近满100的数字。超过数千将被四舍五入到最接近的完整1000数字。如果数字超过10 000,那么它总是四舍五入到最接近的满10 000。
希望你能理解我所追求的目标。
答案 0 :(得分:1)
您可以使用一些简单的数学运算(主要是计算钙值)并使用负精度round()函数进行内置
function customRound($number) {
return round($number, -floor(log10($number)));
}
echo customRound(6701); // sample of usage
-floor(log10($number))
这部分是为了计算num - 1的长度,并且对于round()需要也是否定
答案 1 :(得分:1)
因为我厌倦了人们没有读那该死的问题 ......
function myRound(int $number) : int {
// remove typehints if you're on old versions of PHP...
$magnitude = abs($number);
if( $magnitude < 1000) $precision = -2;
elseif( $magnitude < 10000) $precision = -3;
else $precision = -4;
return round($number,$precision);
}
答案 2 :(得分:0)
在这里查看round()
功能
http://php.net/manual/en/function.round.php
和此处的ceil()
功能
http://php.net/manual/en/function.ceil.php
像
这样的东西$number = 1;
$number = ceil($number / 10) * 10;
echo $number;
答案 3 :(得分:0)
您可以使用以下功能:
$number = 45000;
function rounder($num)
{
$length = strlen($num);
if(is_int($num))
{
if($num < 100)
return round($num, -($length));
elseif($num < 1000 || $num <= 9999)
return round($num, -($length-1));
else
return round($num, -4);
}
}
echo rounder($number);
虽然没经过测试,但应该有效..
答案 4 :(得分:0)
这是一个解决方案:
$numbers = [
34,
89,
421,
561,
4421,
6701,
45000,
91000,
132000
];
foreach ($numbers as $number) {
$len = strlen((string)$number);
$precision = $len - 1;
$precision = $len <= 2 ? 2 : $precision;
$precision = $len > 4 ? 4 : $precision;
echo $number . ' => '. round($number, -1 * $precision) . PHP_EOL;
}
输出:
34 => 0
89 => 100
421 => 400
561 => 600
4421 => 4000
6701 => 7000
45000 => 50000
91000 => 90000
132000 => 130000