I would recommend using a confirmation dialog after the user enters in their value.
Rather than make the user enter the value twice or interact with a drop down menu (I'm just not fond of that control in this scenario), you could simply display a confirmation dialog to the user after entering the value. This could be done every time or my preference would be if the value is over a specified threshold. This confirmation dialog could frame the value in terms like "You entered 2.5 Million, is that correct?". Using this language was suggested in previous answers and I agree with them that phrasing the value this way can improve clarity.
As a side thought, I would consider increasing the value of each unit of currency. This will lower the range of inputs the user will need to enter. For example, if the lowest currency cost is 3,000 units then perhaps it could cost 300 (or even 30). By increasing the value of each unit of currency, you help to lessen the issue that you are bringing up.
In my opinion this approach allows the user a quick entry, especially when performing small purchases but also gives reassurance to the user of the value entered. My last thought would be sure to insert commas or spaces as the user enters the value since this helps the value to be more clearly understood at the time of entering it in.