Dude, I was trying to explain to you, using pure mathematical notation (i.e., not solidity code), that 0.0000001 times 10^18 is not equal to 0.001, but rather, to 10^11, which is of course an integer value, representable by a uint256.

In short, what you need to do, is to pass something like BigNumber.from("100000000000").

Or perhaps BigNumber.from(10).pow(11), or even BigNumber.from("10e11").

It really depends on what BigNumber implementation you're using.

But following your original question, as well as your response to my answer, I believe that you might wanna study some basic programming concepts before jumping to smart contracts.