HarmonyOS ArkTS 实战实现一个房贷计算器项目效果本文实现的是一个基于 HarmonyOS 和 ArkTS 的房贷计算器。项目中使用 ArkUI 组件完成页面布局通过State管理状态数据实现贷款金额、期限、利率输入支持等额本息和等额本金两种计算方式实时计算月供、总还款和总利息并显示详细的还款信息。最终运行效果如下页面主要包含以下内容顶部应用标题贷款类型切换商业贷款/公积金/组合贷贷款金额输入贷款期限选择年利率输入还款方式切换等额本息/等额本金计算结果卡片月供、总还款、总利息显示页面整体采用 ArkUI 声明式布局。本文重点是演示如何在 HarmonyOS 项目中使用 ArkTS 和 ArkUI 实现一个财务计算类单页面应用。项目代码主要写在entry/src/main/ets/pages/Index.ets文件中适合作为 HarmonyOS ArkTS 入门到进阶之间的练习案例。前言买房是很多人人生中的大事而房贷计算是买房过程中必不可少的环节。了解月供、总利息等信息可以帮助我们更好地规划财务选择合适的贷款方案。手动计算房贷公式复杂容易出错一个好用的房贷计算器可以快速准确地给出结果。从应用开发角度来看这个项目不依赖后端接口也不需要数据库但能练习 ArkTS 中的状态管理、表单输入、单选按钮、实时计算、数学公式和结果展示等内容。本文基于 HarmonyOS 和 ArkTS 实现一个房贷计算器。用户可以输入贷款金额、期限和利率选择还款方式实时看到月供、总还款和总利息等关键数据帮助用户做出购房决策。这个项目的核心不是简单的数学公式而是准确的财务计算和清晰的结果展示。每一次参数修改和方式切换本质上都是对计算状态的管理。状态变化后页面会自动刷新这正是 ArkUI 声明式开发的基本思想。一、项目目标本次实践主要实现以下目标创建 HarmonyOS ArkTS 页面使用Entry和Component定义页面组件使用State管理页面状态支持商业贷款计算支持等额本息还款方式支持等额本金还款方式贷款金额输入万元贷款期限选择年年利率输入%实时计算月供计算总还款额计算总利息显示首月/末月月供等额本金使用Builder封装输入项和结果卡片完成一个可以运行的房贷计算器页面。这个项目虽然是单页面应用但它实现了专业的房贷计算功能有完整的输入、计算和结果展示流程比普通静态页面更适合练习 ArkTS。二、技术栈类型内容开发方向HarmonyOS 应用开发开发语言ArkTSUI 框架ArkUISDK 版本HarmonyOS API 23 及以上工程模型Stage 模型核心组件Text / TextInput / Button / Radio / Column / Row状态管理State数据处理财务计算 / 数学公式 / 实时响应项目入口entry/src/main/ets/pages/Index.ets运行平台模拟器或真机本项目是 HarmonyOS 原生 ArkTS 项目。页面主体由 ArkUI 组件构建核心逻辑写在Index.ets文件中不依赖后端接口也不需要额外配置数据库。三、为什么选择房贷计算器项目房贷计算器适合作为 ArkTS 练习项目主要有以下几个原因。第一实用性强。房贷计算是很多人买房时都会用到的功能有很强的实际需求。第二业务场景真实。购房决策需要了解月供压力和利息成本是非常实用的财务工具。第三适合练习状态管理。贷款金额、期限、利率、还款方式都属于页面状态。状态变化后页面会自动刷新。第四适合练习表单交互。数字输入、单选按钮等表单控件的使用是前端开发基础。第五适合练习复杂计算。等额本息和等额本金有不同的计算公式可以锻炼逻辑能力。第六扩展空间比较大。基础功能完成后可以继续增加公积金贷款、组合贷、提前还款计算、还款明细和税费计算。在本项目中输入参数和还款方式是核心数据。所有计算结果都基于这些参数实时计算。四、功能规则说明还款方式方式特点等额本息每月还款额相同前期利息多本金少等额本金每月本金相同月供逐月递减总利息少计算公式等额本息月供 [贷款本金×月利率×(1月利率)^还款月数] ÷ [(1月利率)^还款月数-1]总还款 月供 × 还款月数总利息 总还款 - 贷款本金等额本金首月月供 (贷款本金÷还款月数) (贷款本金-已还本金)×月利率每月递减 贷款本金÷还款月数×月利率总利息 (还款月数1)×贷款本金×月利率÷2总还款 贷款本金 总利息默认参数贷款金额100万元贷款期限30年年利率4.9%商业贷款基准利率还款方式等额本息五、项目结构本项目主要修改首页文件entry └── src └── main └── ets └── pages └── Index.ets其中文件作用Index.ets编写页面结构、状态数据和房贷计算逻辑本文不涉及复杂路由也不需要额外创建多个页面。对于练习项目来说把主要逻辑集中在一个Index.ets文件中更方便理解。六、核心实现思路本项目的核心流程如下使用State保存贷款金额、期限、年利率和还款方式用户输入贷款金额万元用户选择贷款期限用户输入年利率用户选择还款方式参数变化时自动重新计算根据还款方式使用对应公式计算显示月供、总还款、总利息等结果等额本金时显示首月和末月月供格式化金额显示添加千分位分隔符。项目中最重要的状态变量如下State loanAmount: string 100 State loanYears: number 30 State interestRate: string 4.9 State repaymentType: number 0其中状态变量作用loanAmount贷款金额万元loanYears贷款期限年interestRate年利率%repaymentType还款方式0等额本息1等额本金这些参数是计算的基础任何一个变化都会触发重新计算。七、Index.ets 完整代码打开文件entry/src/main/ets/pages/Index.ets将其中内容替换为下面代码EntryComponentstruct Index{StateloanAmount:string100StateloanYears:number30StateinterestRate:string4.9StaterepaymentType:number0privateyearOptions:number[][5,10,15,20,25,30]privategetMonthlyPayment():number{letprincipalthis.getPrincipal()letmonthsthis.loanYears*12letmonthlyRatethis.getMonthlyRate()if(principal0||monthlyRate0||months0)return0if(this.repaymentType0){returnprincipal*monthlyRate*Math.pow(1monthlyRate,months)/(Math.pow(1monthlyRate,months)-1)}else{returnprincipal/monthsprincipal*monthlyRate}}privategetLastMonthlyPayment():number{if(this.repaymentType0)returnthis.getMonthlyPayment()letprincipalthis.getPrincipal()letmonthsthis.loanYears*12letmonthlyRatethis.getMonthlyRate()letmonthlyPrincipalprincipal/monthsreturnmonthlyPrincipalmonthlyPrincipal*monthlyRate}privategetTotalPayment():number{letprincipalthis.getPrincipal()letmonthsthis.loanYears*12letmonthlyRatethis.getMonthlyRate()if(this.repaymentType0){returnthis.getMonthlyPayment()*months}else{returnprincipal(months1)*principal*monthlyRate/2}}privategetTotalInterest():number{returnthis.getTotalPayment()-this.getPrincipal()}privategetPrincipal():number{letamountparseFloat(this.loanAmount)returnisNaN(amount)?0:amount*10000}privategetMonthlyRate():number{letrateparseFloat(this.interestRate)returnisNaN(rate)?0:rate/100/12}privateformatMoney(amount:number):string{returnamount.toFixed(2).replace(/\B(?(\d{3})(?!\d))/g,,)}BuilderInputItem(label:string,value:string,unit:string,onChange:(v:string)void,placeholder?:string){Row(){Text(label).fontSize(15).fontColor(#182431).width(90)TextInput({text:value,placeholder:placeholder||}).layoutWeight(1).height(44).fontSize(16).textAlign(TextAlign.End).backgroundColor(Color.Transparent).type(InputType.Number).onChange(onChange)Text(unit).fontSize(15).fontColor(#6B7280).margin({left:8})}.width(100%).padding({left:16,right:16}).height(56).backgroundColor(#F9FAFB).borderRadius(12).margin({bottom:12})}BuilderResultItem(label:string,value:string,highlight:booleanfalse){Row(){Text(label).fontSize(14).fontColor(#6B7280)Blank()Text(value).fontSize(highlight?24:18).fontWeight(highlight?FontWeight.Bold:FontWeight.Medium).fontColor(highlight?#0A59F7:#182431)}.width(100%).padding({top:12,bottom:12})}build(){Column(){Text(房贷计算器).fontSize(28).fontWeight(FontWeight.Bold).fontColor(#182431).margin({top:22})Text(基于 HarmonyOS ArkTS 的房贷计算工具).fontSize(14).fontColor(#6B7280).margin({top:8,bottom:20})Column(){Text(贷款信息).fontSize(16).fontWeight(FontWeight.Medium).fontColor(#182431).width(100%).margin({bottom:12})this.InputItem(贷款金额,this.loanAmount,万元,(v:string){this.loanAmountv},请输入金额)Text(贷款期限).fontSize(15).fontColor(#182431).width(100%).margin({bottom:8})Flex({wrap:FlexWrap.Wrap,justifyContent:FlexAlign.Start}){ForEach(this.yearOptions,(year:number){Button(${year}年).height(36).padding({left:16,right:16}).fontSize(14).margin({right:8,bottom:8}).fontColor(this.loanYearsyear?Color.White:#4B5563).backgroundColor(this.loanYearsyear?#0A59F7:#F3F4F6).borderRadius(18).onClick((){this.loanYearsyear})},(y:number)y.toString())}.width(100%).margin({bottom:12})this.InputItem(年利率,this.interestRate,%,(v:string){this.interestRatev},请输入利率)Text(还款方式).fontSize(15).fontColor(#182431).width(100%).margin({bottom:8})Row(){Row(){Radio({value:0,group:repayType}).checked(this.repaymentType0).onChange((isChecked:boolean){if(isChecked)this.repaymentType0})Text(等额本息).fontSize(15).fontColor(#182431).margin({left:8})}.onClick((){this.repaymentType0})Blank().width(40)Row(){Radio({value:1,group:repayType}).checked(this.repaymentType1).onChange((isChecked:boolean){if(isChecked)this.repaymentType1})Text(等额本金).fontSize(15).fontColor(#182431).margin({left:8})}.onClick((){this.repaymentType1})}.width(100%)}.width(100%).padding(16).backgroundColor(Color.White).borderRadius(16).margin({bottom:16}).shadow({radius:8,color:#08000000,offsetX:0,offsetY:2})Column(){Text(计算结果).fontSize(16).fontWeight(FontWeight.Medium).fontColor(#182431).width(100%).margin({bottom:8})this.ResultItem(this.repaymentType0?每月月供:首月月供,${this.formatMoney(this.getMonthlyPayment())}元,true)if(this.repaymentType1){this.ResultItem(末月月供,${this.formatMoney(this.getLastMonthlyPayment())}元)Divider().color(#F3F4F6)}this.ResultItem(还款总额,${this.formatMoney(this.getTotalPayment())}元)Divider().color(#F3F4F6)this.ResultItem(支付利息,${this.formatMoney(this.getTotalInterest())}元)}.width(100%).padding(20).backgroundColor(Color.White).borderRadius(16).shadow({radius:8,color:#08000000,offsetX:0,offsetY:2})Text(* 计算结果仅供参考实际以银行审批为准).fontSize(12).fontColor(#9CA3AF).margin({top:16})}.width(100%).height(100%).padding({left:18,right:18}).backgroundColor(#F5F7FA)}}八、代码实现说明1. 等额本息计算使用等额本息公式计算每月还款额returnprincipal*monthlyRate*Math.pow(1monthlyRate,months)/(Math.pow(1monthlyRate,months)-1)总还款 月供 × 月数总利息 总还款 - 本金。2. 等额本金计算等额本金首月月供最高逐月递减// 首月月供 月还本金 全额本金月利息returnprincipal/monthsprincipal*monthlyRate// 末月月供 月还本金 剩余1个月本金利息returnmonthlyPrincipalmonthlyPrincipal*monthlyRate总利息使用等差数列求和公式计算。3. 实时计算参数变化时自动重新计算不需要点击计算按钮提供流畅体验。4. 金额格式化使用正则表达式添加千分位分隔符让大额数字更易读returnamount.toFixed(2).replace(/\B(?(\d{3})(?!\d))/g,,)5. 期限快捷选择提供常用贷款期限的快捷按钮点击即可选择比输入更方便。6. 还款方式切换使用Radio组件选择还款方式切换后自动重新计算等额本金时额外显示末月月供。九、运行项目代码编写完成后在DevEco Studio中运行项目。测试不同金额、期限、利率和还款方式的计算结果验证公式正确性检查结果格式化是否正确。十、开发中遇到的问题财务公式准确性确保等额本息和等额本金公式正确边界情况处理输入0或非法值时返回0避免NaN金额格式化正确添加千分位分隔符保留两位小数等额本金特殊显示需要显示首月和末月月供因为每月递减十一、总结本文基于HarmonyOS和ArkTS实现了一个房贷计算器。项目通过State管理输入参数使用专业的财务公式实现等额本息和等额本金计算实时显示月供、总还款和总利息。这个项目展示了ArkTS中表单输入、实时计算和数学公式应用的基本方法适合作为入门练习项目。
企业数字化 ERP 产品动态
相关推荐
大模型技术学习体系与实战应用全解析 1. 大模型技术学习体系全景解析最近两年,大模型技术以惊人的速度发展,从最初的Transformer架构到如今的千亿参数模型,整个技术栈已经形成了完整的知识体系。作为一名长期跟踪AI技术发展的从业者,我完整梳理了当前大模型领域最核心… · 2026/11/12 23:27:13
LLM如何实现智能对话状态跟踪与优化 1. 项目概述:当AI Agent学会"记住"对话在自然语言处理领域,让AI系统维持连贯的多轮对话一直是个棘手问题。想象你正和客服机器人沟通订单问题,每次回复都要重复订单号和问题描述——这种体验就像得了健忘症的接线员。传统对话系统采… · 2026/11/12 23:27:13
AI辅助学术开题报告:从混沌到逻辑闭环的五步拆解法 1. 开题报告的本质困境与破局思路 读研期间最让我头皮发麻的瞬间,莫过于导师拿着我的开题报告初稿说:"这个研究问题像没煮熟的饺子——皮是有了,馅儿还是散的。"当时才意识到,开题报告根本不是形式主义的"入场券&q… · 2026/11/6 9:50:51
新疆去哪里考电工证好 电工实操怕挂科?全国通用证书怎么拿更稳妥 新疆去哪里考电工证好 电工实操怕挂科?全国通用证书怎么拿更稳妥 实操考试心里没底怕挂科?你不是一个人在战斗。特别是在新疆,想考电工证,选对地方和机构比死记硬背理论还重要。别急,我从业这么多年,见过太多人因为没找对地方,浪费钱又浪费时间。今天… · 2026/11/12 23:26:56
洛阳特殊工种电工证怎么考 内部消息教你避开报名陷阱 洛阳特殊工种电工证怎么考 内部消息教你避开报名陷阱 你是不是还在为 洛阳特殊工种电工证 发愁?明明想早点拿到证上岗,却又不知道去哪报名,怕被中介坑,怕交了钱拿不到证?我懂你,这年头信息太多,真假难辨,很多人就是被“内部消息”忽悠了,结果竹篮… · 2026/11/12 23:26:56
金堂办电工证怎么选培训机构 全国通用的证别被坑了 金堂办电工证怎么选培训机构 全国通用的证别被坑了 你不知道去哪报名怕被中介坑?金堂办电工证的小伙伴越来越多,但很多在职建筑工人对流程一头雾水,怕走错路花冤枉钱。别急,今天就给你讲清楚怎么选机构、怎么报名、怎么考试,关键是拿到的电工证… · 2026/11/12 23:26:56
金堂办电工证学历不高怕报不上名?良心建议帮你搞懂真相 金堂办电工证学历不高怕报不上名?良心建议帮你搞懂真相 你是不是也这样想:学历不高,考个电工证怕是连报名资格都没有?别急,今天我就从一个在应急管理部门摸爬滚打多年的“老江湖”角度,说说【金堂办电工证】到底能不能报,怎么报,还有哪些你不知道的细… · 2026/11/12 23:26:56
锡盟苏尼特左旗电工证怎么复审?郑州报考避坑指南帮你搞定 锡盟苏尼特左旗电工证怎么复审?郑州报考避坑指南帮你搞定 证书过期了不知道怎么复审延期?别慌,你不是一个人在战斗。尤其是在特种作业领域,像【锡盟苏尼特左旗电工证】这类证书一旦过期,不仅影响工作,还可能带来严重的法律责任。很多人在操作过程中因为… · 2026/11/12 23:25:55
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/11 19:07:25
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/11 17:14:54
电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工、焊工、高处作业人员的真实写照。尤其是像你这样刚毕业的鹤壁工程类毕业生,一边要找工作,一边要考证,时间紧张,复习效率低。但你可能不知… · 2026/11/12 0:00:56
新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 实操考试心里没底怕挂科?你不是一个人。新乡的水利工程从业者,很多在报考电工证的时候都担心自己操作不熟练、考试不通过, 千万别踩坑 ,选对资料和方法真的能提高通过率。… · 2026/11/12 0:00:56
网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 实操考试心里没底怕挂科,这是很多准备报考【网电工证】的学员最真实的感受。尤其是在高压电工、低压电工等工种上,操作环节的容错率极低,一旦失误就可能直接被判定不合格。很多人因为担心挂科而放弃考… · 2026/11/12 0:00:56
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:35:34
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:36:01
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21