This worked for me

Code:
on *:JOIN:#: {
  var %user $nick
  if ($readini(rxcoin.ini,#michaelukz,%user,coins) != $null) {
    writeini -n rxcoin.ini %user coins $calc($readini(rxcoin.ini,%user,coins) + 1)
    var %var $readini(rxcoin.ini,%user,coins)
  }
  else {
    writeini -n rxcoin.ini %user coins 1
    var %coin $readini(rxcoin.ini,%user,coins)
  }
}

on *:TEXT:!balbusers *:#: { 
  var %user $nick
  var %val $readini(rxcoin.ini,%user,coins)
  if ($nick isop #michaelukz) {
    if ($2 == null) {
      msg $chan /me >: Please supply a name to read.
    }
    else {
      msg $chan /me >: $2 has %val credits.
    }
  }
}

on *:TEXT:!balance:#: { 
  var %user $nick
  var %val $readini(rxcoin.ini,%user,coins)
  if (%val == $null) {
    msg $chan /me >: You have no coins
  }
  else {
    msg $chan /me >: $nick has %val credits.
  }
}

on *:TEXT:!givecreds *:#: { 
  var %user $nick
  var %val $readini(rxcoin.ini,%user,coins)
  if ($nick isop #michaelukz) {
    if ($2 == $null) { 
      msg $chan /me >: Please enter a name to give credits too.
    }
    if ($3 == $null) { 
      msg $chan /me >: Please enter the number of credits to give.
    }
    msg $chan $2 has been given $3 credits
    set %money.add $calc($readini(rxcoin.ini,%user,coins) + $3 )
    writeini -n rxcoin.ini %user coins %money.add
    unset %money.add
  }
}

on *:TEXT:!dcreds *:#: { 
  var %user $nick
  var %val $readini(rxcoin.ini,%user,coins)
  if ($2 == $null) { 
    msg $chan /me >: Please insert a name to send credits too.
  }
  if ($3 == $null) { 
    msg $chan /me >: Please enter the number of credits  to give.
  }
  if (%val == $null) { 
    msg $chan /me >: You have no credits to give!
  }
  if (%val == 0) { 
    msg $chan /me >: You have no credits to give!
  }
  msg $chan /me >: $2 has been given $3 tokens by $nick
  var %money.add $calc($readini(rxcoin.ini,$2,coins) + $3 )
  var %money.withdraw $calc($readini(rxcoin.ini,%user,coins) - $3)
  writeini -n rxcoin.ini %user coins %money.withdraw
  writeini -n rxcoin.ini $2 coins %money.add
  unset %money.add
  unset %money.withdraw
}


So the problem seems to be you were using to many things for writeini, so when readini wanted to read a value it read a blank space. Technically you can keep your old format just change it to

$readini($readini(rxcoin.ini,#michaelukz,%user)

It will then reply with "$nick has coins 1 credits". So I think the code was counting "coins 1" as one piece instead of two different entities.

Also, just as a few side notes you can use # instead of typing out #michaeluks. It can cut down on the typing also if someone wants to use your script they don't have to go in there and change every line. Lastly, try not setting variables unless you need them in another command. Again its your choice how you code, just some advice I have.