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

TS/JS计算损益率结果与Excel不一致,无法得到-13%结果如何解决?

问题原因分析

  • 核心差异来自百分比格式化的精度规则不一致:根据你给出的数值计算,代码逻辑计算出的原始损益率为 (10000000 - 125000 - 50000 - 11250000)/11250000 ≈ -12.67%,Excel中如果设置了百分比格式保留0位小数,会自动四舍五入显示为-13%,如果你的代码没有做对应精度的四舍五入处理,就会出现展示结果不一致的问题。
  • 次要排查点:确认Excel单元格的计算公式是否存在未同步到代码的隐藏调整项,比如额外的成本扣减、汇率换算等逻辑,从你给出的已知参数来看暂未发现逻辑冲突。
  • 边界风险:当前代码未处理账面净值为0的场景,会出现除零错误得到NaN结果。

修复方案

修改calc方法,增加精度处理和边界判断即可:

this.dealDispositionFormFields.salePrice = 10000000
this.dealDispositionFormFields.brokerCommission = 125000
this.dealDispositionFormFields.transactionCosts = 50000
this.dealDispositionFormFields.netBookValue = 11250000

calc() {
  const salePrice = this.dealDispositionFormFields.salePrice ?? 0;
  const brokerCommission = this.dealDispositionFormFields.brokerCommission ?? 0;
  const transactionCosts = this.dealDispositionFormFields.transactionCosts ?? 0;
  const netBookValue = this.dealDispositionFormFields.netBookValue ?? 0;

  this.netProceeds = salePrice - brokerCommission - transactionCosts;
  this.netSaleGainLossRate = this.netProceeds - netBookValue;

  // 处理除零边界,同时按Excel规则四舍五入到整数百分比
  if (netBookValue === 0) {
    this.netSaleGainLossPercentage = 0;
  } else {
    const rawPercentage = this.netSaleGainLossRate / netBookValue;
    // 四舍五入到两位小数,对应百分比展示保留0位小数的效果
    this.netSaleGainLossPercentage = Math.round(rawPercentage * 100) / 100;
  }
}

如果需要和Excel的精度完全对齐,可根据Excel实际保留的小数位数调整Math.round的乘除系数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:02