Basta usar currying e um argumento implícito:
def smartFloor(x: Double)(
implicit precision: Double = math.log10(x).floor
) = x - (x % math.pow(10, precision))
Uso:
scala> smartFloor(1234)
res: Double = 1000.0
scala> smartFloor(0.542)
res: Double = 0.5
scala> smartFloor(0.542)(-2)
res: Double = 0.54