我有一个带小数字段的表,我需要向下舍入。
这是表格的数据摘录:
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; }
答案 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;
}
以功能形式;
function round_mid($i) {
return (fmod($i, 1) > 0.5
? sprintf("%2.f", (float) (int) $i + 0.5)
: sprintf("%2.f", (float) (int) $i));
}
答案 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));