That's the reality of interacting with ERC-20 tokens and you are doing this correctly using parseUnits and formatUnits functions.