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.
- Compute your z statistic and keep its sign.
- Look up the cumulative area to the left of z, written Φ(z), in a z table, a spreadsheet or software.
- 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
- NIST/SEMATECH e-Handbook of Statistical Methods, section 1.3.6.7.1, “Cumulative Distribution Function of the Standard Normal Distribution”: itl.nist.gov/div898/handbook/eda/section3/eda3671.htm (checked 2026-10-29).
- NIST/SEMATECH e-Handbook, section 1.3.6.6.1, Normal distribution: itl.nist.gov/div898/handbook/eda/section3/eda3661.htm (checked 2026-10-29).
- Microsoft Support, NORM.S.DIST function: support.microsoft.com (checked 2026-10-29).
- R Documentation, The Normal Distribution (stats): stat.ethz.ch/R-manual/R-devel/library/stats/html/Normal.html (checked 2026-10-29).
- American Psychological Association, APA Style numbers and statistics guide: apastyle.apa.org/instructional-aids/numbers-statistics-guide.pdf (checked 2026-10-29).
- Wasserstein, R. L., & Lazar, N. A. (2016). The ASA’s statement on p-values: Context, process, and purpose. The American Statistician, 70(2), 129-133. https://doi.org/10.1080/00031305.2016.1154108 (checked 2026-10-29).







