geth --fast sync is nearly complete, and the balance shows correctly on Etherscan.
I was running geth on linux and haven't synced in a while, so I deleted the chaindata and updated the wallet and started re-syncing with
geth --fast. Even after what seemed like a full sync my balance showed 0. I can see the account has more than 0 ether on Etherscan.
I copied my keystore file to a Windows machine and tried Ethereum Wallet, same thing is happening. The last transaction was at about block 3800000, I am synced up to 235 blocks left and still have a 0 balance. The sync is also stuck, can't seem to get the last 235 blocks, but my balance should be showing the full amount right now.
Losing my mind right now, it's a lot of money. Even if my keystore was somehow corrupted, the wallet should still show the balance since that is public info. I also verified I'm on the main network.