24

我发现我经常最终编写一个我总是称之为“ clamp()”的函数,它是一种和的min()组合max()。此功能是否有标准的“规范”名称?

它总是看起来像这样:

function clamp($val, $lower, $upper)
{
  if ($val < $lower)
    return $lower;
  else if ($val > $upper)
    return $upper;
  else
    return $val;
}

或者简单地使用内置min()max()函数:

function clamp($val, $lower, $upper)
{
  return max($lower, min($upper, $val));
}

存在变体:您还可以检查无效输入 where lower > upper,然后抛出异常或反转输入。或者您可以忽略输入的顺序并将其称为三个函数的中值,但这可能会造成混淆。

4

8 回答 8

37

夹子是个好名字。

让我们把它作为标准。

于 2009-02-05T16:00:12.073 回答
5

在某些语言中,您有功能限制

num = 限制(val,最小值,最大值)

于 2009-02-05T16:06:22.653 回答
3
clip(val, lo, hi)
于 2009-02-05T16:26:26.543 回答
1

我们pin在这里使用。实际上,我们使用pin简单的范围和clamp其他东西。

于 2009-02-05T16:43:32.390 回答
0

我只是去一个函数名“rangeCheck”

于 2009-02-05T15:59:07.270 回答
0

绑定呢?

bound(min, val, max)

还是约束

constrain(val, min, max)
于 2012-10-17T19:14:41.733 回答
0

您如何看待InRangeClosestTo (Number, RangeLowerBound, RangeUpperBound) 或ClosestInRange (Number, LowerBoundOfRange, UpperBoundOfRange) 之类的东西?他们的意思是“给我最接近数字的范围内的元素”,我希望这是显而易见的。

这个概念比一个有两侧但不多的 Clamp 更精确,或者如果数字不在范围内,可能不想返回任何内容的 Limit 或 Bound,

对我来说,它们比我看到的其他部分更清晰;虽然理解它们可能需要几秒钟的时间,但您只需要对名称进行推理,最多可以简单地看一下评论以确认;当你看到它有多精确时,这很好(它是精确的,对吧?)。

您可能只会怀疑范围是否包含在内,但我认为大多数人会正确地认为它是包含在内的。或者,您可以使用 InInclRangeClosestTo 和 InExclRangeClosestTo,尽管我没有看到独占范围有很多用途。

当然,如果你想使用它们,你应该有一个自动完成的 IDE。

于 2014-04-17T20:18:44.363 回答
-1

中位数

因为它泛化到更多的值。

于 2009-02-05T16:41:57.997 回答