我有一个带有十进制字段的表,我需要将其舍入。
下面是这个表的数据片段:
number
9.5
9.53
7.25
6.9
9.6
8.0
8.3
8.75
9.0
12.25
12.65
11.0
如果XXX.0和XXX.5之间的数字需要四舍五入到XXX.0(如。8.3或12.25期望8.0或12.0)
如果号码在XXX.5和XXX.0之间,则需要四舍五入到XXX.5(如。9.53或9.6期待9.5或9.5)
否则数字保持不变(如。8.0或11.0)
我的问题是:我怎么定义小数点前面的数,它可以是0到20之间的任何数?我在任何地方都没有发现类似的东西……是否有一种方法可以只查看小数点后的值?下面是一个截短的示例代码,其中XXX是十进制数的未知部分:
if(($number > XXX.0) && ($number < XXX.5))
{ $newNumber = round($number, 0, PHP_ROUND_HALF_DOWN); }
elseif(($number > XXX.5) && ($number < XXX.0))
{ $newNumber = round($number, 0, PHP_ROUND_HALF_DOWN); }
elseif(($number == XXX.5) || ($number == XXX.0))
{ $newNumber = $number; }
您可以使用fmod
返回浮点余数,然后执行简单的三进制来输出您想要的结果。
<?php
$n = array(
8.3, //8.0
12.25, //12.00
9.53, //9.5
9.6 //9.5
);
foreach($n as $i) {
echo $i .' = '. (fmod($i, 1) > 0.5
? sprintf("%2.f", (float) (int) $i + 0.5)
: sprintf("%2.f", (float) (int) $i)) . PHP_EOL;
}
https://eval.in/411076 和函数形式;
function round_mid($i) {
return (fmod($i, 1) > 0.5
? sprintf("%2.f", (float) (int) $i + 0.5)
: sprintf("%2.f", (float) (int) $i));
}
https://eval.in/411080 就像这样转换$number$beforeDecimal = (int)$number;
$newNumber = floor($number) + 0.5 * (fmod($number, 1) >= 0.5);
$newNumber = floor($number*2)/2