Как изменить NaN на 0? - PullRequest
       11

Как изменить NaN на 0?

0 голосов
/ 25 марта 2020

Как я могу изменить значение NaN на 0? Я хочу удалить NaN или преобразовать в ноль.

Можно ли сделать NaN == 0?

Screenshot

$('.srednia').change(function() {
  oblicz_srednia_aaa();
  oblicz_srednia_bbb();
}).change();

function oblicz_srednia_aaa() {
  var Sum = 0,
    count = $("[type='checkbox']:checked").length;
  $(".AAA").each(function() {
    if ($(this).closest('tr').find('.srednia').is(':checked')) {
      var value = $('p', this).text();
      if (!isNaN(value) && value.length != 0) {
        Sum += parseFloat(value);
      }
    }
  });
  $('#srednia_AAA').text((Sum / count).toFixed(1));
};

function oblicz_srednia_bbb() {
  var Sum = 0,
    count = $("[type='checkbox']:checked").length;
  $(".BBB").each(function() {
    if ($(this).closest('tr').find('.srednia').is(':checked')) {
      var value = $('p', this).text();
      if (!isNaN(value) && value.length != 0) {
        Sum += parseFloat(value);
      }
    }
  });
  $('#srednia_BBB').text((Sum / count).toFixed(1));
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Nazwa</th>
      <th>Data</th>
      <th>A</th>
      <th>B</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr id="1">
      <td>
        <p>Firma 1</p>
      </td>
      <td>
        <p>Marzec</p>
      </td>
      <td class="AAA">
        <p>16.4</p>
      </td>
      <td class="BBB">
        <p>25.5</p>
      </td>
      <td>
        <input type="checkbox" class="srednia"> zaznacz
      </td>
    </tr>
    <tr id="2">
      <td>
        <p>Firma 2</p>
      </td>
      <td>
        <p>Luty</p>
      </td>
      <td class="AAA">
        <p>14.1</p>
      </td>
      <td class="BBB">
        <p>30.2</p>
      </td>
      <td>
        <input type="checkbox" class="srednia"> zaznacz
      </td>
    </tr>
    <tr id="brak">
      <td>
        <p>Średnia:</p>
      </td>
      <td>
      </td>
      <td class="AAA">
        <strong><div id="srednia_AAA"></div></strong>
      </td>
      <td class="BBB">
        <strong><div id="srednia_BBB"></div></strong>
      </td>
      <td>
      </td>
    </tr>
  </tbody>
</table>

1 Ответ

0 голосов
/ 25 марта 2020

Вы получаете NaN, потому что делите на 0, когда ничего не проверено.

Вы можете использовать условное выражение, чтобы проверить, что count больше 0 перед выполнением деление.

$('.srednia').change(function() {
  oblicz_srednia_aaa();
  oblicz_srednia_bbb();
}).change();

function oblicz_srednia_aaa() {
  var Sum = 0,
    count = $("[type='checkbox']:checked").length;
  $(".AAA").each(function() {
    if ($(this).closest('tr').find('.srednia').is(':checked')) {
      var value = $('p', this).text();
      if (!isNaN(value) && value.length != 0) {
        Sum += parseFloat(value);
      }
    }
  });
  $('#srednia_AAA').text((count > 0 ? (Sum / count) : 0).toFixed(1));
};

function oblicz_srednia_bbb() {
  var Sum = 0,
    count = $("[type='checkbox']:checked").length;
  $(".BBB").each(function() {
    if ($(this).closest('tr').find('.srednia').is(':checked')) {
      var value = $('p', this).text();
      if (!isNaN(value) && value.length != 0) {
        Sum += parseFloat(value);
      }
    }
  });
  $('#srednia_BBB').text((count > 0 ? (Sum / count) : 0).toFixed(1));
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Nazwa</th>
      <th>Data</th>
      <th>A</th>
      <th>B</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr id="1">
      <td>
        <p>Firma 1</p>
      </td>
      <td>
        <p>Marzec</p>
      </td>
      <td class="AAA">
        <p>16.4</p>
      </td>
      <td class="BBB">
        <p>25.5</p>
      </td>
      <td>
        <input type="checkbox" class="srednia"> zaznacz
      </td>
    </tr>
    <tr id="2">
      <td>
        <p>Firma 2</p>
      </td>
      <td>
        <p>Luty</p>
      </td>
      <td class="AAA">
        <p>14.1</p>
      </td>
      <td class="BBB">
        <p>30.2</p>
      </td>
      <td>
        <input type="checkbox" class="srednia"> zaznacz
      </td>
    </tr>
    <tr id="brak">
      <td>
        <p>Średnia:</p>
      </td>
      <td>
      </td>
      <td class="AAA">
        <strong><div id="srednia_AAA"></div></strong>
      </td>
      <td class="BBB">
        <strong><div id="srednia_BBB"></div></strong>
      </td>
      <td>
      </td>
    </tr>
  </tbody>
</table>
...