Ten units ordered, 9.99 credited, the order fully filled with nothing left resting. That missing hundredth is the fee for the trade, and there is a published rule for which asset it is taken from. Binance's help page How to Calculate Binance Spot Trading Fees? puts it in one line: "Trading fees are always charged in the asset you receive."
So the shortfall always lands on whichever side you received. Buy, and the coin count is short. Sell, and the cash is. Switch the BNB discount on and neither is short, because a third balance is being drawn down instead. The table below is the whole map of that; everything after it is how to hold your own fill up against it.
Three cases, three balances
| Case | Fee taken from | What you see | Where it is confirmed |
|---|---|---|---|
| Discount off, buying | The coin you bought | Credited quantity slightly below the quantity filled | Trade History, fee column, denominated in that coin |
| Discount off, selling | The quote asset you received | Proceeds slightly below quantity filled times average price | Same column, denominated in the quote asset |
| Discount on | BNB | Both traded amounts reconcile; the BNB balance falls | Same column, denominated in BNB |
A structural summary for working out which balance the shortfall sits in. Rate tiers, discount size, eligibility and where each setting lives follow Binance's current pages and your local terms, checked September 2026.
The last row is the one that gets reported as a fault. With the discount enabled, the fee stops coming out of the traded pair; the help page describes it as charged "in the cryptocurrency you receive as a result of the trade and subsequently converted into BNB", at the market price when the trade fills. The counter-intuitive part is that the quantities finally reconcile and the BNB goes down. That is the setting doing its job, and the mechanics are in the BNB fee-discount guide.
Two edge cases can switch the discount off without you touching anything, both set out on Binance's How to Use BNB to Pay for Fees and Earn up to 25% Discount? page. Insufficient BNB is the first: the page says you will be charged the original fee, and stops there. It does not say which asset that original fee comes out of; our own reading, not the page's, is that it reverts to the default above and lands on the traded pair. Insufficient balance is also the first thing the discount on but nothing saved looks at. The second case is a token whose value against BNB sits below a very small threshold, which does not qualify at all, and there the fee may be charged in either the token or BNB. The threshold figure is printed on the help page.
One more situation is not a failure but a duplication. Trading bots such as spot grid and DCA are charged the standard fee from the bot account first, and the help page then has the fee refunds credited back to the Spot Account. One trade, more than one row in the record, and reading only the first row looks like an overcharge.
Two divisions, and four things that bend them
No fee schedule required. Take the fill and divide. On a buy:
(quantity filled − quantity credited) ÷ quantity filled
On a sell, switch to money:
(quantity filled × average fill price − proceeds received) ÷ (quantity filled × average fill price)
Quantity filled, in both, means what actually executed. On a fully filled order that is the quantity you ordered; on a partial fill it is not, and using the ordered quantity there will throw the buy-side result out by however much never executed.
What comes back is the rate this trade actually bore. Ordinary spot accounts sit around a tenth of a percent, a fraction below that with the discount enabled, and your own tier is printed on the fee schedule page. Only the order of magnitude matters: same magnitude and there is nothing to investigate, a full order out — whole percent rather than tenths — and something else has probably landed in the same window, which the charge identification route sorts faster by category.
Aim the arithmetic at the right number, too. The estimate on the order form is not a reconciliation figure, and the same help page says so: "the [Est. Fee] displayed on the trading page is for reference only. The actual transaction fee depends on the final amount of assets you receive from the executed trade." At the moment you place the order nothing yet knows how much will fill, so reconcile against Trade History.
Four things will bend the division before anything suspicious does:
- The summary is one line, the detail is several. Larger orders routinely fill across several trades, each charged separately, and a blended average applied to a single fill leaves a residue in the last decimals. Use the per-fill rows.
- A market order priced from the screen. The average fill price and the number showing when you tapped are usually some way apart; the formula wants the fill average. What separates posting from taking, on price as much as on rate, is in maker versus taker.
- One-tap conversion, where there is no fee row at all. Quoted-price conversion bakes the cost into the price, leaving no shortfall to divide. Compare the price you were given with the spot price at that moment instead; round-trip arithmetic is in one buy, one sell.
- A bot charge sitting next to its refund. The rows from the previous section. Net them first, or the standard-rate row on its own reads far too high.
Which number belongs in your records
The consequence is not really about this trade. After a buy, what you hold is the credited quantity, and that is what belongs in the denominator:
cost basis = quote asset actually paid ÷ quantity actually credited
Every worked example on this site uses that convention. Dividing by the quantity filled understates the basis by a hair — nothing on one fill, and compounding afterwards, because break-even levels, exit targets and annual cost ratios all inherit it. How far price has to recover before a round trip is flat is worked out in round-trip costs and the break-even point; to walk a past period fill by fill, use the real fee audit. The same per-fill figures are what tax records want, as why your fees belong in your tax records sets out.
After your next fill, copy the asset and amount from the fee column in Trade History and run whichever division fits. If the result lands in the same order of magnitude as your tier, that fill is accounted for. If what you actually want is a total for the period rather than one trade, checking what you actually paid is the shorter route.