如何从 PHP 中的起始数字验证小数步进
How to validate decimal stepping from a starting number in PHP
我需要根据我的步进规则验证输入的数字是否有效,如果不是,则四舍五入到最接近的有效数字。这些数字将会改变,但一个例子是:
$min = 0.25;
$step = 0.1
$qty = 0.75 // user input
因此这些将是有效的输入:
0.75
0.85
0.95
但这些应该四舍五入:
0.76(至 0.85)
0.80(至 0.85)
我以为我可以以某种方式使用模数,但计算不正确。
if (($qty % min) / $step == 0)) {
echo "good";
}
我尝试了一些可能非常错误的数学变体
$step = 0.1;
$min = 0.25;
$qty = .85;
$h = ($qty / $min) / $step;
echo $h;
$j = mround($qty, $min-$step);
echo $j;
function mround($num, $parts) {
if ($parts <= 0) { $parts = 1; }
$res = $num * (1/$parts);
$res = round($res);
return $res /(1/$parts);
}
我想你可以使用 fmod
来做到这一点。
$new = $original + ($step - fmod($original - $minimum, $step));
我需要根据我的步进规则验证输入的数字是否有效,如果不是,则四舍五入到最接近的有效数字。这些数字将会改变,但一个例子是:
$min = 0.25;
$step = 0.1
$qty = 0.75 // user input
因此这些将是有效的输入: 0.75 0.85 0.95
但这些应该四舍五入: 0.76(至 0.85) 0.80(至 0.85)
我以为我可以以某种方式使用模数,但计算不正确。
if (($qty % min) / $step == 0)) {
echo "good";
}
我尝试了一些可能非常错误的数学变体
$step = 0.1;
$min = 0.25;
$qty = .85;
$h = ($qty / $min) / $step;
echo $h;
$j = mround($qty, $min-$step);
echo $j;
function mround($num, $parts) {
if ($parts <= 0) { $parts = 1; }
$res = $num * (1/$parts);
$res = round($res);
return $res /(1/$parts);
}
我想你可以使用 fmod
来做到这一点。
$new = $original + ($step - fmod($original - $minimum, $step));