0

我需要每个 $N 的值是 0.05,但是它必须始终四舍五入到最接近的 0.11、0.22、0.33、0.44、0.55、0.66、0.77、0.88 或 1(0.99)。这意味着如果值为 2,则显示为 (0.11),如果为 1,则显示为 (0.11),但如果为 8,则显示为 (0.44)。我完全不知道这是如何工作的,我自己查找并没有让我走得太远。

$N = count($_POST['val']);

.

if(empty($_POST['val'])){
    echo "Please select at least one check box!";
}else{
$N = floor(100*ceil(($_POST['val'][$i]*0.05)*9)/9)/100;
    echo("$N items(s) selected!: ");
    for($i=0; $i < $N; $i++){
        echo($_POST['val'][$i] . " ");
    }
}
4

1 回答 1

1

我有$result = floor(100*ceil(($_POST['val'][$i]*0.05)*9)/9)/100;

步进 0.11 应该是(大约)1/9,而不是 1/11。

  • 将后值乘以 0.05
  • 乘以 9,向上取整(ceil),除以 9 得到我们的实际值
  • 通过将小数点向右移动两个位置,截断余数并将其移回来截断小数。

编辑:感谢 Greg Hewgill 的收获;用地板功能代替圆形。似乎 PHP 没有 truncate 函数,并且转换似乎比一些更多的数字移位更混乱。

于 2013-09-05T22:51:33.353 回答