Free trial · 7 days

Get a free key

We email you a link; opening it shows your API key. Then message @oddspush on Telegram and we activate your 7-day free trial. No card.

By continuing you agree to the Terms and the Privacy Policy.

Already have a key?

Lost your key?

Odds converter: American, decimal, fractional and implied probability

Last updated

To convert American odds to decimal, add 1 to the profit per unit staked: positive odds give 1 + odds / 100 (+150 is 2.50) and negative odds give 1 + 100 / |odds| (−110 is 1.9091). Fractional odds are that same profit as a fraction (+150 is 3/2), and the implied probability is 1 / decimal (2.50 is 40 %). Type into any box below and the other three update.

1. Odds converter

Edit any one format. American takes -110 or +150, decimal 1.91, fractional 5/2 or evens, and implied probability a percentage such as 52.38. It runs in your browser; nothing is sent anywhere.

Shown rounded: decimal to 4 places, American and the probability to 2. A fraction is shown exactly when its denominator is 100 or less; otherwise the box holds the nearest fraction with a denominator up to 100 and the note under it gives the exact one.

2. The four formats

All four say the same thing, how much a winning bet pays, and each converts exactly into the others. Which one you see depends on where you are: fractional odds are used mainly in the UK and Ireland, decimal odds in continental Europe, Australia, New Zealand and Canada and on betting exchanges, and moneyline odds by bookmakers in the United States.

  • American (moneyline). A positive number is the profit on a 100 stake: +150 wins 150. A negative number is the stake needed to win 100: −110 risks 110 to win 100. Odds between −100 and +100 do not exist, and +100 and −100 are the same price, even money (2.00 decimal).
  • Decimal. The total return per unit staked, stake included: 2.50 returns 2.50 for each 1 staked, a profit of 1.50. Always above 1.00, and the easiest to compute with, since the payout is a single multiplication.
  • Fractional. Profit over stake: 5/2 wins 5 for every 2 staked, which is 3.50 decimal. 1/1 is called evens. A short price reads odds-on: 1/2 wins 1 for every 2.
  • Implied probability. The win rate at which the bet breaks even, 1 / decimal. At 1.9091 (−110) you need to win 52.38 % of the time just to break even. It is what the price says the chance is, the bookmaker's margin included (see below).

A prediction market price is an implied probability already: a Polymarket or Kalshi contract at 62 cents is 62 %, which is 1 / 0.62 = 1.6129 decimal, or −163.16 American. Comparing those markets with Pinnacle is in Polymarket and Kalshi vs Pinnacle.

3. Odds conversion formulas

Every conversion goes through decimal odds. A is the American number without its sign, D decimal odds, p the probability as a fraction of 1:

formulas Text
American to decimal:   +A  ->  1 + A / 100          (+150 -> 2.50)
                       -A  ->  1 + 100 / A          (-110 -> 1.9091)
Decimal to American:    D >= 2  ->  +(D - 1) * 100   (2.50 -> +150)
                        D <  2  ->  -100 / (D - 1)   (1.50 -> -200)
Fractional to decimal:  N/M  ->  1 + N / M           (5/2  -> 3.50)
Decimal to probability: p = 1 / D                    (1.9091 -> 52.38 %)
Probability to decimal: D = 1 / p                    (0.40 -> 2.50)

The switch in decimal to American is at 2.00: from 2.00 up the result is positive, below it negative. Whole American odds always give an exact fraction, A/100 for positive odds and 100/A for negative ones, reduced: −110 is 10/11, −238 is 50/119. Their decimal can be a repeating number (−110 is 1.909090…), so the whole American number is the one that carries no rounding.

4. Common conversions

American Decimal Fractional Implied probability
−300 1.3333 1/3 75.00 %
−200 1.50 1/2 66.67 %
−150 1.6667 2/3 60.00 %
−110 1.9091 10/11 52.38 %
+100 2.00 1/1 (evens) 50.00 %
+110 2.10 11/10 47.62 %
+150 2.50 3/2 40.00 %
+200 3.00 2/1 33.33 %
+300 4.00 3/1 25.00 %
+500 6.00 5/1 16.67 %

−110 on both sides is the classic two-way line: 52.38 % each, 104.76 % together. The extra 4.76 % is the bookmaker's margin, which the next two sections come back to.

5. Pinnacle's odds format: price is American

Bookmaker websites let you choose how odds are displayed, but a data feed has to pick one. OddsPush delivers Pinnacle's prices as Pinnacle publishes them: every leg of a market carries price in American odds, next to its designation and, on spreads and totals, its points. A soccer moneyline as it arrives:

markets[i].prices JSON
"prices": [
  { "designation": "home", "price": -238 },
  { "designation": "away", "price": 655 },
  { "designation": "draw", "price": 318 }
]

The integer is exact and compares cleanly from one update to the next; convert it once in your own code, with the formulas above. −238 is 1.4202 decimal, +655 is 7.55 and +318 is 4.18. The full market fields are in the market reference.

With fair turned on, each price of an open market with two or more outcomes also comes with its decimal odds without the margin, no_vig_decimal and fair_decimal (fair reference), so for those you do not need to convert at all. Streaming the prices is covered in Pinnacle odds over WebSocket, and pre-match markets in Pinnacle pre-match odds.

6. Why implied probabilities add up to more than 100 %

Convert every outcome of one market to implied probability and add them up: the total is above 100 %. The excess is the bookmaker's margin, also called the vig or overround. On the 2.5 total of the docs example:

Outcome Decimal Implied
Over 2.5 at +104 2.04 49.02 %
Under 2.5 at −122 1.8197 54.95 %
Sum 103.97 %

A margin of 3.97 %, the same margin: 0.039746 that the fair message reports for that market. The three-way moneyline above (−238, +655, +318) adds up to 70.41 + 13.25 + 23.92 = 107.58 %.

So the implied probability of a single price overstates the real chance. To estimate the real one, take the margin out: divide each probability by the sum (the multiplicative no-vig), or use the power method, which takes more of the margin off long shots. Both are worked through, with a calculator, in Pinnacle no-vig odds. With a fair probability you can then price your own bets (value betting calculator) or measure them against the close (closing line value).

7. Convert odds in JavaScript and Python

Small functions for the conversions a bot needs. They return null or None for an impossible price instead of a wrong number:

odds.mjs JavaScript
// American odds (the OddsPush `price`) to decimal, and back. Valid American: |odds| >= 100.
export function americanToDecimal(american) {
  if (!Number.isFinite(american) || Math.abs(american) < 100) return null;
  return american > 0 ? 1 + american / 100 : 1 + 100 / -american;
}

export function decimalToAmerican(decimal) {
  if (!(decimal > 1)) return null;
  return decimal >= 2 ? (decimal - 1) * 100 : -100 / (decimal - 1);
}

// Implied probability: the break-even win rate, margin included.
export const impliedProbability = (decimal) => 1 / decimal;

// Fractional odds (profit / stake), reduced. Exact for whole American odds.
export function americanToFraction(american) {
  const gcd = (a, b) => (b ? gcd(b, a % b) : a);
  const [n, d] = american > 0 ? [american, 100] : [100, -american];
  const g = gcd(n, d);
  return `${n / g}/${d / g}`;
}

console.log(americanToDecimal(-110).toFixed(4)); // 1.9091
console.log(decimalToAmerican(2.5)); // 150
console.log((impliedProbability(americanToDecimal(-238)) * 100).toFixed(2)); // 70.41
console.log(americanToFraction(-238)); // 50/119
odds.py Python
from fractions import Fraction


def american_to_decimal(american: float) -> float | None:
    """The OddsPush `price` (American odds) to decimal. Valid American: |odds| >= 100."""
    if abs(american) < 100:
        return None
    return 1 + american / 100 if american > 0 else 1 + 100 / -american


def decimal_to_american(decimal: float) -> float | None:
    if decimal <= 1:
        return None
    return (decimal - 1) * 100 if decimal >= 2 else -100 / (decimal - 1)


def implied_probability(decimal: float) -> float:
    """The break-even win rate, margin included."""
    return 1 / decimal


def american_to_fraction(american: int, max_denominator: int = 100) -> tuple[Fraction, Fraction]:
    """Exact fractional odds, and the nearest with a denominator up to max_denominator."""
    exact = Fraction(american, 100) if american > 0 else Fraction(100, -american)
    return exact, exact.limit_denominator(max_denominator)


print(f"{american_to_decimal(-110):.4f}")                          # 1.9091
print(decimal_to_american(2.5))                                     # 150.0
print(f"{implied_probability(american_to_decimal(-238)):.2%}")      # 70.41%
print(*american_to_fraction(-238))                                  # 50/119 29/69

The Python version needs 3.10 or newer for the float | None hints. To plug them into a live feed, see Pinnacle odds in Python and Pinnacle odds in Node.js, or the complete clients in the docs examples; the market reference converts price the same way.

Pinnacle's prices, as they change

The free trial gives you REST and the live stream, with no-vig, fair and closing odds, all 13 sports, live and pre-match, for 7 days. No card.

OddsPush is not affiliated with, endorsed by or sponsored by Pinnacle. This page explains a calculation; it is not betting or investment advice.