diff --git a/locust/stats.py b/locust/stats.py
index 4ba20644..3feacc05 100644
--- a/locust/stats.py
+++ b/locust/stats.py
@@ -276,7 +276,7 @@ class StatsEntry(object):
     @property
     def fail_ratio(self):
         try:
-            return float(self.num_failures) / (self.num_requests + self.num_failures)
+            return float(self.num_failures) / self.num_requests
         except ZeroDivisionError:
             if self.num_failures > 0:
                 return 1.0

Fail ratio calculation for individual requests is incorrect
### Description of issue

The fail ratio for each individual request is incorrect, and doesn't match the total fail ratio.

### Expected behavior

The fail ratio is correct.

### Actual behavior

The fail ratio is incorrect. For example, if 10 out of 10 requests fail, I'd expect the ratio to be 100%, but instead it is 50%.
```
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s               
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /                                                             10   10(50.00%)    2014    2009    2021  |    2000    0.75               
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                             10  10(100.00%)                                       0.75               
```

### Environment settings

- OS: Windows/Linux
- Python version: 3.6
- Locust version: 0.11.0

### Steps to reproduce (for bug reports)

Create a trivial locustfile.py:

```python

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task
    def index(self):
        self.client.get("/")


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
```
Run it against a host that doesn't have a web server running at all:

`locust --host http://localhost --no-web --clients=10 --hatch-rate=2 --run-time=30`

All of the "GET /" requests fail, but the stats (as shown above) have the failure rate at 50% rather than 100%.

I think the problem is at [stats.py:279](https://github.com/locustio/locust/blob/8b17c286034178ba31c6d48b93f29202514f5659/locust/stats.py#L279):

```python
            return float(self.num_failures) / (self.num_requests + self.num_failures)
```
It seems like it ought to be:

```python
            return float(self.num_failures) / (self.num_requests)
```

Maybe at some point `self.num_requests` was only the count of successful requests?
diff --git a/locust/test/test_stats.py b/locust/test/test_stats.py
index 4b45aeed..fcfee1cc 100644
--- a/locust/test/test_stats.py
+++ b/locust/test/test_stats.py
@@ -252,6 +252,18 @@ class TestStatsEntryResponseTimesCache(unittest.TestCase):
         ))
 
 
+class TestStatsEntry(unittest.TestCase):
+    def setUp(self, *args, **kwargs):
+        super(TestStatsEntry, self).setUp(*args, **kwargs)
+        self.stats = RequestStats()
+
+    def test_fail_ratio_with_failures(self):
+        s = StatsEntry(self.stats, "/", "GET")
+        s.num_requests = 10
+        s.num_failures = 5
+        self.assertAlmostEqual(s.fail_ratio, 0.5)
+
+
 class TestRequestStatsWithWebserver(WebserverTestCase):
     def test_request_stats_content_length(self):
         class MyLocust(HttpLocust):

pip install -e .
parse_log_pytest
pytest
pytest pytest-cov pytest-mock pytest
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
charset-normalizer==2.0.12
click==8.0.4
coverage==6.2
dataclasses==0.8
Flask==2.0.3
gevent==22.10.2
greenlet==2.0.2
idna==3.10
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
itsdangerous==2.0.1
Jinja2==3.0.3
-e git+https://github.com/locustio/locust.git@8b17c286034178ba31c6d48b93f29202514f5659#egg=locustio
MarkupSafe==2.0.1
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
msgpack==1.0.5
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-cov==4.0.0
pytest-mock==3.6.1
pyzmq==25.1.2
requests==2.27.1
six==1.17.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==1.2.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
Werkzeug==2.0.3
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work
zope.event==4.6
zope.interface==5.5.2

name: locust
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - charset-normalizer==2.0.12
      - click==8.0.4
      - coverage==6.2
      - dataclasses==0.8
      - flask==2.0.3
      - gevent==22.10.2
      - greenlet==2.0.2
      - idna==3.10
      - itsdangerous==2.0.1
      - jinja2==3.0.3
      - markupsafe==2.0.1
      - msgpack==1.0.5
      - pytest-cov==4.0.0
      - pytest-mock==3.6.1
      - pyzmq==25.1.2
      - requests==2.27.1
      - six==1.17.0
      - tomli==1.2.3
      - urllib3==1.26.20
      - werkzeug==2.0.3
      - zope-event==4.6
      - zope-interface==5.5.2
prefix: /opt/conda/envs/locust

locust/test/test_stats.py::TestStatsEntry::test_fail_ratio_with_failures
locust/test/test_stats.py::TestRequestStats::test_serialize_through_message locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_no_content_length_streaming
locust/test/test_stats.py::TestRequestStats::test_aggregation locust/test/test_stats.py::TestRequestStats::test_aggregation_with_rounding locust/test/test_stats.py::TestRequestStats::test_avg locust/test/test_stats.py::TestRequestStats::test_current_rps locust/test/test_stats.py::TestRequestStats::test_error_grouping locust/test/test_stats.py::TestRequestStats::test_error_grouping_errors_with_memory_addresses locust/test/test_stats.py::TestRequestStats::test_median locust/test/test_stats.py::TestRequestStats::test_num_reqs_fails locust/test/test_stats.py::TestRequestStats::test_percentile locust/test/test_stats.py::TestRequestStats::test_percentile_rounded_down locust/test/test_stats.py::TestRequestStats::test_percentile_rounded_up locust/test/test_stats.py::TestRequestStats::test_reset locust/test/test_stats.py::TestRequestStats::test_reset_min_response_time locust/test/test_stats.py::TestRequestStats::test_total_rps locust/test/test_stats.py::TestStatsEntryResponseTimesCache::test_diff_response_times_dicts locust/test/test_stats.py::TestStatsEntryResponseTimesCache::test_get_current_response_time_percentile locust/test/test_stats.py::TestStatsEntryResponseTimesCache::test_latest_total_response_times_pruned locust/test/test_stats.py::TestStatsEntryResponseTimesCache::test_response_times_cached locust/test/test_stats.py::TestStatsEntryResponseTimesCache::test_response_times_not_cached_if_not_enabled locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_connection_error locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_content_length locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_named_endpoint locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_no_content_length locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_put locust/test/test_stats.py::TestRequestStatsWithWebserver::test_request_stats_query_variables locust/test/test_stats.py::TestInspectLocust::test_get_task_ratio_dict_relative locust/test/test_stats.py::TestInspectLocust::test_get_task_ratio_dict_total
locust/stats.py
locust/stats.py