【问题标题】:How to validate decimal stepping from a starting number in PHP如何从 PHP 中的起始数字验证十进制步进
【发布时间】:2019-08-09 20:42:52
【问题描述】:

我需要根据我的步进规则验证输入的数字是否为有效数字,如果不是,则四舍五入到最接近的有效数字。这些数字会改变,但一个例子是:

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

【问题讨论】:

  • 所以步骤从最小值开始,而不是从零开始?如何处理低于最小值的值?我还应该问你尝试了什么,你有什么问题......
  • 如果该值小于最小值,它将只使用我已尝试更新问题的最小值

标签: php rounding


【解决方案1】:

我认为您可以使用fmod 来执行此操作。

$new = $original + ($step - fmod($original - $minimum, $step));

Example on 3v4l.org

【讨论】:

  • 谢谢!我永远不会想到这一点
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 2011-01-30
  • 1970-01-01
  • 2014-04-30
  • 2010-09-06
相关资源
最近更新 更多