code: def normal_round_float(x: float, dp: int = 0) -> float:
      
      if not math.isfinite(x):
          return x
      factor = pow(10, dp)
      x = x * factor
      if x >= 0:
          x = math.floor(x + 0.5)
      else:
          x = math.ceil(x - 0.5)
      x = x / factor
      return x
docs: Hmpf. Shouldn't need to have to implement this, but...
  
      Conventional rounding to integer via the "round half away from zero"
      method, e.g.
  
      .. code-block:: none
  
          1.1 -> 1
          1.5 -> 2
          1.6 -> 2
          2.0 -> 2
  
          -1.6 -> -2
          etc.
  
      ... or the equivalent for a certain number of decimal places.
  
      Note that round() implements "banker's rounding", which is never what
      we want:
      - https://stackoverflow.com/questions/33019698/how-to-properly-round-up-half-float-numbers-in-python  # noqa