没有小数的数据循环的Javascript计算

Javascript calculation for a data loop with no decimals

本文关键字:Javascript 计算 循环 数据 小数      更新时间:2023-09-26

我正在尝试计算元素循环的价格:

function calculateBill(id,price)
{
    var t = document.getElementById('total').value;
    var qty = document.getElementById('qty_'+id).value;
    var total = qty * price;

    var tcost = Number(t) + Number(total);
    document.getElementById('total').value = tcost ;
}

我的PHP循环是:

<form name="sendgoods.php" method="post">
                        <?php

                        unset($data2);
                        unset($result2);
                        for( $i2 = 0; $i2<count($r2); $i2++ )
                        {
                        ?>
                        <tr>
                            <td><?php echo $r2[$i2]['veg_name']; ?></td>
                            <td><?php echo $r2[$i2]['ret_price']; ?></td>
                            <td><?php echo $r2[$i2]['mop']; ?></td>
                            <td><?php echo $r2[$i2]['ret_margin']; ?></td>
                            <td>
                                <input type="text" id = "qty_<?php echo $i2; ?>" name="qty_<?php echo $i2; ?>" onkeyup="calculateBill('<?php echo $i2; ?>','<?php echo round($r2[$i2]['ret_price'],2); ?>')"  />
                                <input type="hidden" name="veg_name_<?php echo $i2; ?>" value="<?php echo $r2[$i2]['veg_name']; ?>" />
                                <input type="hidden" name="rate_<?php echo $i2; ?>" value="<?php echo $r2[$i2]['avg_rate']; ?>" />
                                <input type="hidden" name="mop_<?php echo $i2; ?>" value="<?php echo $r2[$i2]['mop']; ?>" />
                                <input type="hidden" name="ws_price_<?php echo $i2; ?>" value="<?php echo round($r2[$i2]['ws_price'],2); ?>" />
                                <input type="hidden" name="ws_margin_<?php echo $i2; ?>" value="<?php echo $r2[$i2]['ws_margin']; ?>" />
                                <input type="hidden" name="ret_price_<?php echo $i2; ?>" value="<?php echo round($r2[$i2]['ret_price'],2); ?>" />
                                <input type="hidden" name="ret_margin_<?php echo $i2; ?>" value="<?php echo $r2[$i2]['ret_margin']; ?>" />
                            </td>
                        </tr>
                        <?php } ?>
                        </table>
                            <input type="hidden" name="customer_id" value="<?php echo $cid; ?>" />
                            <input type="hidden" name="dt" value="<?php echo $dt_str; ?>" />
                            <input type="hidden" name="customer_type" value="<?php echo $ctype_id; ?>" />
                            <input type="hidden" name="counter" value="<?php echo count($r2); ?>"  />
                            <input type="hidden" name="add_goods" value="1" />

                             <div class="we">
                <span class="dscnt">DISCOUNT - </span>
                 <input type="text" id="discount" name="discount"  onchange="calculateDiscount()" />
                <span class="billng_amnt">Total Billing amount - </span>
                <input type="text" id="total" readonly="readonly" />
            </div>
                            <input type="submit" value="SUBMIT" />
                        </form>

我的问题是,如果我添加tcost .toFixed(0),它会计算每行总成本的四舍五入值。假设这些值分别是36、50.8和23.64。计算结果为36 + 51 + 24 = 111。但我想要的是每行总数的四舍五入值,即36 + 50.8 + 23.64 = 110.44,可以四舍五入为110.00。你能建议我怎样才能做到这一点吗?

更新:就像假设有3个循环。在第一个循环中,总行值为36,第二个循环中总行值为50.8(因此现在的总行值为36 + 50.8)。第三个循环行值为23.64(因此总价值为36+50.8+23.64)。如果我将toFixed(0)加到总数上,则相加结果将是(36 + 51 + 24)= 111。但是客户需要的加法是36 + 50.8 + 23.64 = 110.44,现在它的四舍五入值是110.00。希望问题现在讲清楚了

使用parseFloat

就是forA = 30B = 50.8C = 23.64

value = parseFloat(a) + parseFloat(b) + parseFloat(c);

你好,Reading,你的问题非常令人困惑…特别是当你评论说"它在PHP文件中"…我认为这是一个javascript问题!?

你的计算也不正确

30 + 50.8 + 23.64 = 104.44

在javascript中:

var total = Number(30) + Number(50.8) + Number(23.64);
alert(total.toFixed()) // gives you '104'

希望对大家有所帮助

似乎你想四舍五入的值。Math中有3个函数:

  • Math.floor <一口> MDN> 学。ceilMDN:返回大于或等于数字的最小整数。
  • 数学。roundMDN:返回一个四舍五入到最接近的整数的值。

但是我想要的是每行总数的四舍五入值,即36 + 50.8 + 23.64= 110.44,四舍五入为110.00

我认为你需要Math.round:

Math.round ( 110.44 ) //110