Use min and max to keep a value inside a range.

clamp The standard math helpers compose well. `max(raw, lower)` raises a low value, and `min(..., upper)` lowers a high value.

Math Clamp

raw
MathClamp.scala
Replay: real traced execution (multi-file project)
import scala.math.{max, min}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = 12
    val lower = 0
    val upper = 10
    val clipped = min(max(raw, lower), upper)
    val changed = clipped != raw

    println("raw=" + raw)
    println("clipped=" + clipped)
    println("changed=" + changed)
  }
}
import scala.math.{max, min}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = -3
    val lower = 0
    val upper = 10
    val clipped = min(max(raw, lower), upper)
    val changed = clipped != raw

    println("raw=" + raw)
    println("clipped=" + clipped)
    println("changed=" + changed)
  }
}
import scala.math.{max, min}

object Main {
  def main(args: Array[String]): Unit = {
    val raw = 7
    val lower = 0
    val upper = 10
    val clipped = min(max(raw, lower), upper)
    val changed = clipped != raw

    println("raw=" + raw)
    println("clipped=" + clipped)
    println("changed=" + changed)
  }
}
  1. raw ← 12, lower ← 0, upper ← 10, clipped ← 10, changed ← true

    3object Main {4  def main(args: Array[String]): Unit = {5    val raw→ 12 = 12 //@raw=-3, 76    val lower→ 0 = 07    val upper→ 10 = 108    val clipped→ 10 = min(max(raw12, lower0), upper10)9    val changed→ true = clipped10 != raw121011    println("raw=" + raw12)12    println("clipped=" + clipped10)13    println("changed=" + changedtrue)14  }15}
    outputraw=12
    clipped=10
    changed=true
  1. raw ← -3, lower ← 0, upper ← 10, clipped ← 0, changed ← true

    3object Main {4  def main(args: Array[String]): Unit = {5    val raw→ -3 = -36    val lower→ 0 = 07    val upper→ 10 = 108    val clipped→ 0 = min(max(raw-3, lower0), upper10)9    val changed→ true = clipped0 != raw-31011    println("raw=" + raw-3)12    println("clipped=" + clipped0)13    println("changed=" + changedtrue)14  }15}
    outputraw=-3
    clipped=0
    changed=true
  1. raw ← 7, lower ← 0, upper ← 10, clipped ← 7, changed ← false

    3object Main {4  def main(args: Array[String]): Unit = {5    val raw→ 7 = 76    val lower→ 0 = 07    val upper→ 10 = 108    val clipped→ 7 = min(max(raw7, lower0), upper10)9    val changed→ false = clipped7 != raw71011    println("raw=" + raw7)12    println("clipped=" + clipped7)13    println("changed=" + changedfalse)14  }15}
    outputraw=7
    clipped=7
    changed=false