Tính toán chi phí và tiết kiệm trong TypeScript

Bạn có thể tạo phép tính của riêng mình bằng TypeScript. Mã ở cuối trang này giúp bạn xác định xem về lâu dài, việc lắp đặt tấm pin mặt trời có rẻ hơn hay không so với việc tiếp tục trả tiền điện như hiện tại.

Dưới đây là thông tin chi tiết về cách mã xác định chi phí của tấm pin mặt trời.

Phần 1: Yêu cầu và cách thiết lập hệ thống

Trước tiên, hãy xác định mức sử dụng điện và hoá đơn điện hiện tại:

  • Bạn sử dụng bao nhiêu điện mỗi tháng? (monthlyKwhEnergyConsumption)
  • Điện đó có giá bao nhiêu? (energyCostPerKwh)

Tiếp theo, hãy nhập kế hoạch về hệ mặt trời:

  • Có bao nhiêu bảng điều khiển? (panelsCount)
  • Các bảng điều khiển có mạnh không? (panelCapacityWatts)
  • Chi phí lắp đặt là bao nhiêu? (installationCostPerWatt)
  • Có ưu đãi giảm giá nào cho hệ thống không? (solarIncentives)

Phần 2: Tính toán

Dựa trên các giá trị đã nhập, mã sẽ tính toán:

  • yearlyProductionAcKwh: Tổng lượng điện hàng năm mà tấm pin mặt trời của bạn có thể tạo ra.
  • totalCostWithSolar: Chi phí điện trong nhiều năm tấm pin mặt trời.
  • totalCostWithoutSolar: Chi phí điện trong nhiều năm không có tấm pin năng lượng mặt trời.

Phần 3: Kết quả

Mã này cũng cho bạn biết những điều sau:

  • savings: Mức chênh lệch giữa chi phí có và không có tấm năng lượng mặt trời.
  • breakEvenYear: Số năm cần thiết để chi phí của tấm pin mặt trời bằng với số tiền tiết kiệm được từ việc sử dụng điện.

Mã mẫu

// Solar configuration, from buildingInsights.solarPotential.solarPanelConfigs
let panelsCount = 20;
let yearlyEnergyDcKwh = 12000;

// Basic settings
let monthlyAverageEnergyBill: number = 300;
let energyCostPerKwh = 0.31;
let panelCapacityWatts = 400;
let solarIncentives: number = 7000;
let installationCostPerWatt: number = 4.0;
let installationLifeSpan: number = 20;

// Advanced settings
let dcToAcDerate = 0.85;
let efficiencyDepreciationFactor = 0.995;
let costIncreaseFactor = 1.022;
let discountRate = 1.04;

// Solar installation
let installationSizeKw: number = (panelsCount * panelCapacityWatts) / 1000;
let installationCostTotal: number = installationCostPerWatt * installationSizeKw * 1000;

// Energy consumption
let monthlyKwhEnergyConsumption: number = monthlyAverageEnergyBill / energyCostPerKwh;
let yearlyKwhEnergyConsumption: number = monthlyKwhEnergyConsumption * 12;

// Energy produced for installation life span
let initialAcKwhPerYear: number = yearlyEnergyDcKwh * dcToAcDerate;
let yearlyProductionAcKwh: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => initialAcKwhPerYear * efficiencyDepreciationFactor ** year,
);

// Cost with solar for installation life span
let yearlyUtilityBillEstimates: number[] = yearlyProductionAcKwh.map(
  (yearlyKwhEnergyProduced, year) => {
    const billEnergyKwh = yearlyKwhEnergyConsumption - yearlyKwhEnergyProduced;
    const billEstimate =
      (billEnergyKwh * energyCostPerKwh * costIncreaseFactor ** year) / discountRate ** year;
    return Math.max(billEstimate, 0); // bill cannot be negative
  },
);
let remainingLifetimeUtilityBill: number = yearlyUtilityBillEstimates.reduce((x, y) => x + y, 0);
let totalCostWithSolar: number =
  installationCostTotal + remainingLifetimeUtilityBill - solarIncentives;
console.log(`Cost with solar: $${totalCostWithSolar.toFixed(2)}`);

// Cost without solar for installation life span
let yearlyCostWithoutSolar: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => (monthlyAverageEnergyBill * 12 * costIncreaseFactor ** year) / discountRate ** year,
);
let totalCostWithoutSolar: number = yearlyCostWithoutSolar.reduce((x, y) => x + y, 0);
console.log(`Cost without solar: $${totalCostWithoutSolar.toFixed(2)}`);

// Savings with solar for installation life span
let savings: number = totalCostWithoutSolar - totalCostWithSolar;
console.log(`Savings: $${savings.toFixed(2)} in ${installationLifeSpan} years`);