How Fractional Shares Hit the Tape
Fractional shares print on the tape as whole shares, and a February 23, 2026 rule change put a seam in every equity volume series. Here is what moved.
Fractional shares reach the consolidated tape as whole-share prints, and until February 23, 2026 that conversion ran in two directions at once. A trade of less than one share was rounded up to a full share. A trade of more than one share had its fraction truncated away. Any equity volume series that spans that date carries a seam, and on names where fractional orders are common the older numbers were wrong in both directions at the same time.
How does a fractional share order become a print?
Ask for $50 of a stock quoted at $180 and you have ordered 0.2778 shares. No exchange order book accepts that quantity. Exchanges match in whole shares, and the quote that sets the national best bid and offer, the highest bid and lowest offer available to everyone, only counts round lots of 100 shares. Our odd lot quote page covers that second rule.
The broker closes the gap on its own books. It nets fractional interest across its customers, sends the whole-share part to the market as a single order, and hands slices back to accounts as principal fills, meaning the broker itself is the counterparty to your fraction. The print that reaches the public tape carries the broker's whole-share quantity. Your 0.2778 shares sit in your statement, not in the day's published volume.
Hold on to that first fact: most fractional activity has never been visible in public volume at all. What is visible is the aggregated whole-share order standing in for it, plus a thin population of fractional reports sent to the tape directly.
What changed on February 23, 2026
The quantity field itself changed shape. Trade reports now carry share quantities with six decimal places, truncated rather than rounded, so a 0.142857-share report can be published as itself. Before that date every reported quantity had to be a whole number, and the rounding rule was not symmetric.
- Below one share, the quantity was rounded up to 1. Volume appeared that never traded.
- At or above one share, the fraction was cut off. A 2.7-share report published as 2.
Both distortions land in the same field, in opposite directions. Trade counts inherited the first one: a rounded-up sub-share report counts as a whole print in the day's transaction tally. Add these up over a heavily fractionalized name across years of history and the published series can run high, run low, or land accidentally right, with nothing in the series itself to tell you which.
The distribution of small print sizes is where the change shows. The panel below counts every AAPL print under 26 shares across two pinned five-session windows, one in early January 2026 and one in early July 2026. The row at zero holds every print smaller than a single share.
The exact SQL behind every number
SELECT
scaffold.shares AS shares,
toUInt64(ifNull(t.jan_prints, 0)) AS prints_early_january,
toUInt64(ifNull(t.jul_prints, 0)) AS prints_early_july
FROM
(
SELECT toUInt32(arrayJoin(range(0, 26))) AS shares
) AS scaffold
LEFT JOIN
(
SELECT
toUInt32(floor(toFloat64(size))) AS shares,
countIf(sip_timestamp < '2026-02-01 00:00:00') AS jan_prints,
countIf(sip_timestamp >= '2026-07-01 00:00:00') AS jul_prints
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND ((sip_timestamp >= '2026-01-05 00:00:00' AND sip_timestamp < '2026-01-10 00:00:00')
OR (sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'))
AND toFloat64(size) < 26
GROUP BY shares
) AS t ON t.shares = scaffold.shares
ORDER BY sharesThe one-share bucket holds 1360015 prints in the January window and 331200 in the July window, against 132674 prints at two shares in July. The sub-one-share row holds 2 in January and 1191620 in July. Anything under one share that was reported during the January window is sitting one row up, counted as a full share.
Fractional shares versus odd lots
These two get conflated constantly, and they are different exclusions. An odd lot is a whole-share order of fewer than 100 shares. A round lot is 100 shares, the unit the protected quote is built from. Odd lots print on the public tape, carry their own trade condition code, and count in volume. They simply do not update the national best bid and offer. A fractional quantity is a separate idea: less than one share.
Every fractional print is also an odd lot. Almost no odd lot is fractional. The panel below sorts six household names by the share of prints that were odd lots over three sessions in July 2026.
The exact SQL behind every number
SELECT
ticker,
round(100 * countIf(toFloat64(size) >= 1 AND toFloat64(size) < 100) / count(), 1) AS odd_lot_pct,
round(100 * countIf(toFloat64(size) >= 100) / count(), 1) AS round_lot_pct,
countIf(toFloat64(size) < 1) AS sub_one_share_prints
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'PG', 'SPY')
AND sip_timestamp >= '2026-07-08 00:00:00'
AND sip_timestamp < '2026-07-11 00:00:00'
GROUP BY ticker
ORDER BY odd_lot_pct DESCSorted by odd lot share, the list runs from SPY at 74.1% of prints down to KO at 39%. The last column counts prints below a single share: 211801 of them in SPY over the same three sessions. Odd lots are ordinary. Fractional prints are dust on top of them.
Why a volume column is suddenly a decimal
A share quantity was a whole number for thirty years, and everything downstream learned that. Six decimal places break the assumption quietly: a reader that parses the field as an integer either rejects the row or floors 0.5 to 0, and a column typed as an integer stores the same. If you keep your own copy of trade data, the quantity field needs a type with at least six fractional digits, and every sum built on top of it needs the same width.
The cheapest health check on a volume series is average print size: share volume divided by the day's trade count. It is stable within a name over short spans, which makes an abrupt step easy to spot. Here is AAPL across the fortnight bracketing the change.
The exact SQL behind every number
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS session_label,
round(sum(toFloat64(volume)) / sum(transactions), 1) AS shares_per_print,
round(sum(toFloat64(volume)) / 1000000, 1) AS volume_millions
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-02-09'
AND date <= '2026-03-06'
GROUP BY date
HAVING sum(transactions) > 0
ORDER BY dateAAPL averaged 61.3 shares per print on Feb 9, on volume of 44.6 million shares, and 66.2 shares per print on Mar 6. Day-to-day movement of that size is ordinary. February 23 changed how a quantity is written down, not how much stock traded.
Which numbers move when a series crosses the seam
Anything normalized by volume inherits the seam. Four worth checking:
- Relative volume, today's volume against an average of prior sessions. When the lookback reaches back past February 23, 2026, the two sides of the ratio were counted under different rules. Our relative volume page has the formula.
- VWAP, the volume-weighted average price, weights every print by its quantity. Rounded-up sub-share prints carried more weight than they earned. See how VWAP is calculated.
- Minute and daily bars, which are built by summing print sizes inside a window. How OHLCV bars are built walks through that aggregation.
- Turnover and illiquidity measures, which divide a price move by dollar volume over multi-year histories.
Treat February 23, 2026 the way you would treat a corporate action in a price history: a labelled discontinuity, not a glitch to smooth away. Price history has the same problem in a different coat, covered on our split adjusted price history page. Never put pre-change and post-change volume on one axis without marking where the boundary sits.
Average print size over a longer horizon makes the last point. It drifts with market structure at every name, on its own schedule.
The exact SQL behind every number
SELECT
toString(m) AS month,
formatDateTime(m, '%b %Y') AS month_label,
round(sumIf(vol, sym = 'AAPL') / sumIf(trades, sym = 'AAPL'), 1) AS aapl_shares_per_print,
round(sumIf(vol, sym = 'MSFT') / sumIf(trades, sym = 'MSFT'), 1) AS msft_shares_per_print,
round(sumIf(vol, sym = 'KO') / sumIf(trades, sym = 'KO'), 1) AS ko_shares_per_print
FROM
(
SELECT
toStartOfMonth(date) AS m,
ticker AS sym,
toFloat64(volume) AS vol,
transactions AS trades
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'KO')
AND date >= '2025-09-01'
AND date < '2026-08-01'
)
GROUP BY m
ORDER BY mAAPL averaged 91.4 shares per print in Sep 2025 and 54.9 in Jul 2026, while KO ran 61.8 in that closing month. The three series sit at different levels with no common step across the range. A monthly volume series will not show you where the reporting rule changed. The calendar does that, which is why the date is worth writing on the wall.
Windows and exclusions
- The January window covers five sessions, January 5 to January 9, 2026. The July window covers five sessions, July 6 to July 10, 2026. Both are pinned in the SQL, so the panel does not move as new data lands.
- The six-name panel covers three sessions, July 8 to July 10, 2026, and counts every print regardless of venue or condition.
- Trade data lands with a short lag at the front edge, so every window here sits comfortably in the past.
FAQ
Can you buy a fraction of a share on an exchange?
No. Exchange order books accept whole shares only. A fractional order is filled by your broker from its own inventory after it nets customer demand and sends the whole-share part to the market. The fraction is a principal fill between you and the broker.
When did fractional quantities start appearing on the tape?
February 23, 2026. From that date trade reports carry quantities with six decimal places, truncated rather than rounded. Before it, every reported quantity was a whole number.
Were historical volume numbers wrong?
On names with heavy fractional activity, in both directions at once. Sub-one-share reports were rounded up to a full share, which added volume, and reports above one share were truncated, which removed it. The two do not cancel on any predictable schedule.
Is a fractional share trade the same as an odd lot?
No. An odd lot is a whole-share quantity below 100 shares, and odd lots have printed on the tape for decades. A fractional quantity is below one share. Every fractional print is an odd lot; the reverse is close to never true.
What is the safest way to chart volume across the February 2026 boundary?
Label it. Keep quantities in a decimal type wide enough for six places, mark the date on any series that crosses it, and say so plainly whenever a lookback average spans both sides.
Every panel here carries its SQL underneath. Open one, swap the ticker or the window, and count the prints yourself on the Strasmore terminal.