Skip to main content
v2026.11,858 entries · CC-BY 4.0

How to Find the P-Value From a Z-Score

Convert a z-score to a p-value for left-, right- and two-tailed tests, with a worked example, APA reporting and Excel, R and Python code.

Written and maintained by CASRAI Editorial Board

Last updated

To find the p-value from a z-score, look up the cumulative probability for z under the standard normal curve, Φ(z), then pick the tail that matches your alternative hypothesis: left-tailed p = Φ(z), right-tailed p = 1 − Φ(z), two-tailed p = 2 × (1 − Φ(|z|)). For z = 1.24 that gives 0.8925, 0.1075 and 0.2150 respectively. The one step people get wrong is the two-tailed case, where the absolute value of z must be used before doubling.

How do I find the p-value from a z-score by hand?

A z-score says how many standard deviations a value (or a test statistic) lies from the mean of the standard normal distribution, the normal distribution with mean 0 and standard deviation 1. The p-value is the probability, assuming the null hypothesis is true, of a result at least as extreme as the one observed (see the p-value entry). For a z statistic that probability is an area under the standard normal curve.

  1. Compute your z statistic and keep its sign.
  2. Look up the cumulative area to the left of z, written Φ(z), in a z table, a spreadsheet or software.
  3. Choose the tail from your alternative hypothesis (table below) and apply the matching formula.

Symbols. z is the test statistic; Φ(z) is the cumulative probability P(Z ≤ z) of the standard normal distribution; |z| is the absolute value of z; p is the p-value.

Watch which kind of table you have

Tables come in two layouts and mixing them up shifts every answer by 0.5. The NIST/SEMATECH e-Handbook table lists the area under the standard normal curve from 0 to z. For a positive value, add 0.5 to the table entry to get P(Z ≤ z); for a negative value, P(Z ≤ z) = 1 − P(Z ≤ |z|). The handbook’s own example is z = 1.96: the table entry is 0.47500, so P(Z ≤ 1.96) = 0.975. Many textbook tables instead list the cumulative area from the far left, and then the entry is Φ(z) directly.

One-tailed vs two-tailed p-value from a z-score

The tail follows the direction of the alternative hypothesis, which you should fix before looking at the data. The two-tailed hypothesis testing guide explains when each is justified.

Alternative hypothesis p-value formula Excel R Python (standard library)
Less than (left-tailed) Φ(z) =NORM.S.DIST(z,TRUE) pnorm(z) NormalDist().cdf(z)
Greater than (right-tailed) 1 − Φ(z) =1-NORM.S.DIST(z,TRUE) pnorm(z, lower.tail = FALSE) 1 - NormalDist().cdf(z)
Not equal to (two-tailed) 2 × (1 − Φ(|z|)) =2*(1-NORM.S.DIST(ABS(z),TRUE)) 2 * pnorm(abs(z), lower.tail = FALSE) 2 * (1 - NormalDist().cdf(abs(z)))

Because the standard normal curve is symmetric about 0, the two-tailed p-value is exactly twice the one-tailed p-value in the direction of the observed z. Using |z| is what keeps the answer from exceeding 1 when z is negative.

Worked example: z = 1.24

Suppose a z-test returns z = 1.24.

  • Cumulative area: Φ(1.24) = 0.8925.
  • Right-tailed p = 1 − 0.8925 = 0.1075.
  • Left-tailed p = Φ(1.24) = 0.8925 (this is the wrong tail if the effect you expected is positive).
  • Two-tailed p = 2 × 0.1075 = 0.2150. Software gives 0.2149754 before rounding.

With the NIST-style table, the entry for z = 1.24 is 0.8925 − 0.5 = 0.3925, and adding 0.5 recovers Φ(1.24).

A negative z: z = −2.10

Φ(−2.10) = 0.0179, so the left-tailed p-value is 0.0179. The two-tailed p-value is 2 × (1 − Φ(2.10)) = 2 × 0.0179 = 0.0357. A right-tailed test on this z gives 1 − 0.0179 = 0.9821, which shows why the tail choice matters: the same z can be significant in one direction and nowhere near significant in the other.

A larger z: z = 2.5

Right-tailed p = 1 − 0.99379 = 0.0062; two-tailed p = 0.0124.

Interpreting the result

Compare p with the significance level α you set in advance (see what alpha means in statistics). If p ≤ α, the data are statistically significant at that level. The critical z values that correspond to common cutoffs are covered in how to find a critical value; in the NIST critical-value table, 0.975 pairs with z = 1.960 and 0.950 with z = 1.645, which is why |z| ≥ 1.96 corresponds to a two-tailed p ≤ 0.05.

Result Reading
p ≤ α The data are unlikely under the null hypothesis at your chosen level; reject the null.
p > α Not enough evidence to reject the null. This is not evidence that the null is true.
Two-tailed p from the same |z| Twice the one-tailed p, so a one-tailed result near α may not survive a two-tailed test.

A p-value is not the probability that the null hypothesis is true, and it does not measure the size or importance of an effect. The American Statistical Association’s 2016 statement on p-values makes the same point (Wasserstein & Lazar, The American Statistician, 70(2), 129-133).

Assumptions and common mistakes

  • Using z when you should use t. The z conversion assumes the test statistic follows the standard normal distribution, which requires a known population standard deviation or a large-sample approximation such as a z-test for proportions. With a small sample and an estimated standard deviation, use the t distribution instead; see how to find the p-value for a t-test.
  • Forgetting to double for a two-tailed test, or doubling Φ(z) instead of the tail area. For a positive z, 2 × Φ(z) is above 1.
  • Not taking the absolute value. For z = −2.10, 2 × (1 − Φ(−2.10)) = 1.96, which is not a probability.
  • Mixing table layouts (area from 0 versus cumulative from the left), described above.
  • Reporting p = 0 for very large |z|. Report p < .001 instead.
  • Choosing the tail after seeing the data. The direction belongs in the hypothesis, not in the result.

How to report it (APA example)

The APA Style numbers and statistics guide says to report exact p values to two or three decimals (for example, p = .006 or p = .03) and to write values below .001 as p < .001. Using the two-tailed result above:

The difference was not statistically significant, z = 1.24, p = .215.

For z = 2.5 with a two-tailed test, write z = 2.50, p = .012. Report the exact value rather than only “p < .05”, and keep the p-value to the same convention throughout the paper.

How to calculate it in Excel, R or Python

All three use the cumulative standard normal distribution. In Excel, NORM.S.DIST(z,cumulative) returns the cumulative distribution when the second argument is TRUE; Microsoft’s documentation shows =NORM.S.DIST(1.333333,TRUE) returning 0.908788726. In R, pnorm(q, mean = 0, sd = 1, lower.tail = TRUE) returns P[X ≤ x] by default and P[X > x] when lower.tail = FALSE.

Excel

=2*(1-NORM.S.DIST(ABS(1.24),TRUE))   → 0.2149754 (two-tailed)
=1-NORM.S.DIST(1.24,TRUE)            → 0.1074877 (right-tailed)

R

z <- 1.24
2 * pnorm(abs(z), lower.tail = FALSE)  # 0.2149754 two-tailed
pnorm(z, lower.tail = FALSE)           # 0.1074877 right-tailed
pnorm(z)                               # 0.8925123 left-tailed

Python

from statistics import NormalDist

z = 1.24
phi = NormalDist().cdf(z)
print(1 - phi)                              # 0.10748769707458694 right-tailed
print(phi)                                  # 0.8925123029254131 left-tailed
print(2 * (1 - NormalDist().cdf(abs(z))))   # 0.21497539414917388 two-tailed

If you already have the normal distribution set up, see the normal and standard normal distribution guide for more worked conversions.

FAQ

How to find p value from z score?

Find Φ(z), the cumulative probability for your z, then use 1 − Φ(z) for a right-tailed test, Φ(z) for a left-tailed test, or 2 × (1 − Φ(|z|)) for a two-tailed test. For z = 1.24 the two-tailed p-value is 0.2150.

Do I double the p-value for a two-tailed test?

Yes. Double the area in the tail beyond |z|, because extreme results in either direction count. Do not double Φ(z) itself.

What z-score gives p = 0.05?

For a two-tailed test, |z| = 1.96; for a one-tailed test, z = 1.645 (right tail) or −1.645 (left tail), consistent with the NIST critical-value pairings of 0.975 with 1.960 and 0.950 with 1.645.

Can I use this for a t-test?

No. A t statistic follows the t distribution, whose tails are heavier for small samples. Use the t-based method in the guide linked above.

Sources

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Ask CASRAI · free to try

Ask about How to Find the P-Value From a Z-Score

Ask your first 2 questions free below. Subscribers get 150 a day for $29 a month.

An AI assistant specialized in research administration. It cites the sources behind every answer, labels web answers and says when it can't answer.

Answers draw on CASRAI's guides and dictionary plus the federal and funder documents we index: Federal Register, Grants.gov, Regulations.gov and UKRI.

Works on this site and inside Claude, Cursor and the AI tools you already use.

Everything CASRAI publishes — this page, the dictionary, the guides and the news — stays free to read, with no account and no card.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →