如何用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
相关产品推荐
相关产品推荐

