使用未知数字进行Round Down

时间:2015-08-03 09:40:03

标签: php

我有一个带小数字段的表,我需要向下舍入。

这是表格的数据摘录:

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; }

4 个答案:

答案 0 :(得分:1)

您可以使用fmod返回浮点余数,然后执行简单的ternary输出所需的结果。

<?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

答案 1 :(得分:0)

像这样投出$ number $beforeDecimal = (int)$number;

答案 2 :(得分:0)

$newNumber = floor($number) + 0.5 * (fmod($number, 1) >= 0.5);

答案 3 :(得分:0)

InputStream in = getClass().getResourceAsStream("/classpath/to/my/file");
BufferedReader input = new BufferedReader(new InputStreamReader(in));