J'ai ce code HTML qui récupère les données de la base de données. J'ai défini un tableau en entrée HTML.
Code Html
<script> $(document).ready(function(){ var sum_jan1 = parseFloat(0); $(".jan1").each(function(){ var value = parseFloat($(this).val()); sum_jan1 += value; }); $('#total_jan1').val(sum_jan1); }); </script>
La valeur de jan1 [] s'affiche dans console.log comme p >
CATEGORY JANUARY FEBRUARY BANANA NaN NaN 1000 NaN 2000 NaN NaN NaN TOTAL 3000 0
Quand j'essaie de faire la somme du total pour jan1 [], la sortie s'affiche comme NaN car une partie de la valeur du tableau est NaN. Comment puis-je définir la valeur NaN sur 0 et faire le calcul de la somme?
Ce que je veux faire est de résumer la valeur comme ci-dessous
NaN 1000 3000 NaN
Voici le code de jQuery.
<table> <thead> <tr> <th>Category</th> <th>January</th> <th>February</th> </tr> </thead> <tbody> <?php $sql = DB::getInstance()->FetchArray("select * from table"); if(count($sql) > 0) { foreach($sql as $row) { $i = 0; if($i == 0) {?> <tr> <td><input type="text" class="cat1" id="cat1" name="cat1[]" value="<?php echo $row['CATEGORY']; ?>" placeholder="" readonly></td> <td><input type="text" class="jan1" id="jan1" name="jan1[]" value="<?php echo (($row['MONTH']=='JANUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td> <td><input type="text" class="feb1" id="feb1" name="feb1[]" value="<?php echo (($row['MONTH']=='FEBRUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td> </tr> <?php } else {?> <tr> <td></td> <td><input type="text" class="jan1" id="jan1" name="jan1[]" value="<?php echo (($row['MONTH']=='JANUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td> <td><input type="text" class="feb1" id="feb1" name="feb1[]" value="<?php echo (($row['MONTH']=='FEBRUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td> </tr> <?php } $i++; } ?> <tr> <td colspan="2" style="text-align:right;">Total</td> <td><input type="text" class="form-control inputnumberwith2decimals total_jan1" id="total_jan1" name="" value="" placeholder="" readonly></td> <td><input type="text" class="form-control inputnumberwith2decimals total_feb1" id="total_feb1" name="" value="" placeholder="" readonly></td> </tr> </tbody> </table>
Merci.
3 Réponses :
Il vous suffit de convertir les valeurs NaN en 0 dans votre fonction de somme. Voici un exemple d'utilisation de reduce
:
const arr = [NaN, 1000, 3000, NaN]; let sum = arr.reduce((acc, num) => acc += num ? num : 0, 0); console.log(sum); // 4000
Essayez ceci
<script> $(document).ready(function(){ var sum_jan1 = parseFloat(0); $(".jan1").each(function(){ var value = parseFloat($(this).val()); sum_jan1 += value?value:0; }); $('#total_jan1').val(sum_jan1); });
remplacez simplement var value = parseFloat ($ (this) .val ());
à
var value = $ (this) .val ()? $ (this) .val (): 0;
ligne.
Cela résoudra votre problème.
NaN
est faux donc vous pouvez utiliservar value = parseFloat ($ (this) .val ()) || 0;
Copie possible de Comment désactiver NaN de parseInt en 0 pour une chaîne vide?