docs: def set_dtype(self, value, check: bool = True):
          """Change data type of the bin contents.
  
          Allowed conversions:
          - from integral to float types
          - between the same category of type (float/integer)
          - from float types to integer if weights are trivial
  
          Parameters
          ----------
          value: np.dtype or something convertible to it.
          check: bool
              If True (default), all values are checked against the limits
          """
          # TODO? Deal with unsigned types
          value, type_info = self._eval_dtype(value)
          if value == self._dtype:
              return
  
          if self.dtype is None or np.can_cast(self.dtype, value):
              pass    # Ok
          elif check:
              if np.issubdtype(value, np.integer):
                  if self.dtype.kind == "f":
                      for array in (self._frequencies, self._errors2):
                          if np.any(array % 1.0):
                              raise RuntimeError("Data contain non-integer values.")
              for array in (self._frequencies, self._errors2):
                  if np.any((array > type_info.max) | (array < type_info.min)):
                      raise RuntimeError("Data contain values outside the specified range.")
  
          self._dtype = value
          self._frequencies = self._frequencies.astype(value)
          self._errors2 = self._errors2.astype(value)
          self._missed = self._missed.astype(value)