# calculate token amount

I have variable: TokenPriceWei = 2000 , that means I set 1 token price for 2000 Wei.

When I get msg.value , is it correct tokensAmount = (msg.value / TokenPriceWei) to get correct token Amount?

I'm wondering because i've seen some examples and none of them do that when calculating token /wei rate.

This is, in theory, correct, but remember that you cannot represent a decimal point in solidity.

if you send 3500wei the operation 3500/2000 = 1 and not 1.75. There are three solutions:

1. Require this: `require(msg.value%TokenPriceWei == 0)`, so people send the exact amount for an integer number of tokens. (not so friendly)

2. Get the number of tokens as `msg.value/TokenPriceWei` and then return to the buyer this amount: `msg.value % TokenPriceWei`, which is the residual of the division in the example of `3500/2000` this is `1` token purchased and then `1500wei` returned to the user.

3. Use a multiplier to be able to represent decimal point indirectly.Include a variable `decimals` then:

`decimals = 10**3; // 3 is the number of decimal points, it can be anything you want, 18 is most used in tokens`

`numberoftokens = (masg.value*decimals)/TokenPriceWei;`

Notice that this make a huge number of ERC20 tokens. Mist will use the variable decimals to correct the value when presenting it to the users.You need to remember this multiplier on anything that you do with the tokens, this is how most token contracts do it. For instance, in the example of `3500wei` you will get: `3500*1000/2000 = 3500000/2000 = 1750` Mist will get that decimals is `1000` and will show that the user has `1.75` tokens.

Hope it helps.