TST: Isin converted floats unnecessarily to int causing rounding issues
- [x] closes #19356
- [x] closes #21804
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry



The problem I was facing is, that we sometimes get numpy arrays from dtype objects actually containing integers/floats, which we would like to cast to integer to try isin. So  we can not really filter for integer dtypes on ``values``. But sometimes they contain strings, which leads to raise in ``maybe_upcast``, hence the try except block. I am not patricularly happy with this solution either, but I did not know a better way to convert to integer dtype if possible and pass in all other cases. I think a recent PR from @jbrockmendel may have obviated the need for this, but merge master and let's see No, ``ensure_data`` is still called without taking the dtype of ``values`` into account. Causes the same problems as before unfortunately ive been looking at `_ensure_data` from another angle, and it basically needs to be split into two functions.  one for everything besides `isin`, in which `dtype` is never passed, and another for `isin` in which we need to pass both `comps` and `values` at the same time and use something like `find_common_dtype` That would work, yes. Will look into this during the weekend The one usage of _ensure_data that passed `dtype` has now been removed, so that can likely be simplified now. Your commit yesterday fixed above cases, so only adding tests here. this might be fixed on master now, can youi revisit Yes was fixed by @jbrockmendel, hence only adding tests here excellent, thanks @phofl 