Batu Lab NotesPractical developer guides

Clamp a numeric input to a chosen interval

By Batu ยท English technical notes

Also published in our Blogger archive.

Clamp a numeric input to a chosen interval

A clamp maps every value into an inclusive interval: values below the lower bound become that bound, values above the upper bound become the upper bound, and values already inside remain unchanged. This is useful when a configuration or form has already been parsed as a number but a downstream calculation accepts only a limited range.

max(lower, min(value, upper)) expresses that rule directly. The inner min caps the value at upper; the outer max then raises any remaining too-small result to lower. In this example, a requested opacity of 1.4 becomes 1.0, while 0.35 is preserved. The assertions cover all three outcomes, including the lower-bound case.

The bounds must be ordered. The helper raises ValueError instead of silently returning a surprising value when lower exceeds upper. It also assumes inputs are mutually comparable numeric values; it does not parse strings, reject NaN, or establish application-specific units. If floats can be non-finite, validate them before clamping.

min() and max() are built-in functions available in all supported Python versions. Their normal comparison behavior is documented in the Python built-in functions reference.

AI assistance disclosure: This article was drafted with AI assistance and should be adapted to the receiving application's validation rules.


def clamp(value, lower, upper):
    if lower > upper:
        raise ValueError("lower bound must not exceed upper bound")
    return max(lower, min(value, upper))


assert clamp(-0.2, 0.0, 1.0) == 0.0
assert clamp(0.35, 0.0, 1.0) == 0.35
assert clamp(1.4, 0.0, 1.0) == 1.0

print(f"opacity={clamp(1.4, 0.0, 1.0):.1f}")
opacity=1.0