You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP实现直线法下累计折旧与残值数据的表格自动计算展示

直线法折旧计算代码调整方案

问题原因

你的代码存在3个核心逻辑问题:

  • 累计折旧列没有逐年累加年折旧额,每次仅输出单年折旧值
  • 残值没有逐年扣除累计折旧,每次仅扣除单年折旧额
  • 表单提交的开始年份$awal没有被使用,默认取了当前年份

调整后的完整PHP处理代码

<?php
// 接收表单参数,增加数值类型转换避免计算报错
$nominal = (float)$_POST['nominal'];
$depresiasi = (int)$_POST['depresiasi'];
$awal = (int)$_POST['awal'];
$residu = (float)$_POST['residu'];

// 计算固定年折旧额
$penyusutan_tahunan = ($nominal - $residu) / $depresiasi;
// 初始化累计折旧变量
$akumulasi_total = 0;
?>

<h2>Nominal : <?php echo number_format($nominal,0,',','.');?></h2>
<h2>Lama Depresiasi : <?php echo $depresiasi;?> Tahun</h2>
<table id="values" border="1" cellpadding="8" cellspacing="0">
    <tr>
        <th>Nominal</th>
        <th>Tahun</th>
        <th>Umur</th>
        <th>Akumulasi</th>
        <th>Residu</th>
    </tr>
<?php 
    $no  = 1;
    $years = $awal; // 调用表单提交的开始年份
    for ($i=0; $i < $depresiasi ; $i++) { 
        // 累加当年折旧到累计总额
        $akumulasi_total += $penyusutan_tahunan;
        // 计算当年残值
        $residu_saat_ini = $nominal - $akumulasi_total;
?>
    <tr>
        <td><?php echo number_format($nominal,0,',','.'); ?></td>
        <td><?php echo $years++; ?></td>
        <td><?php echo $no++; ?></td>
        <td><?php echo number_format($akumulasi_total,0,',','.'); ?></td>
        <td><?php echo number_format($residu_saat_ini,0,',','.'); ?></td>
    </tr>
<?php   } ?>
</table>

额外优化说明

如果你想要根据填写的开始/结束年份自动计算折旧年限,不需要手动填折旧时长,只需要把$depresiasi = (int)$_POST['depresiasi'];替换为$depresiasi = (int)$_POST['akhir'] - (int)$_POST['awal'] + 1;即可。

  • 新增number_format方法格式化数值为印尼常用的千位分隔符格式,和预期展示效果一致
  • 给参数增加强制类型转换,避免字符串类型导致计算错误
  • 给表格增加了边框、内边距样式,展示更清晰

内容的提问来源于stack exchange,提问作者Meow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:48:04