I think the main hurdle is that we need to read this inside-out, which is something we face regularly trying to read nested function calls. I seriously believe pipe-like operators solve this problem cleanly.
In Elixir which does have the pipe `|>` this could be.
number = number |> max(lower_bound) |> min(upper_bound)
Which IMO is quite elegant.