金额高精度计算器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/tas20260539 这个高精度金额技能,并读取其 SKILL.md,以便在 CRM 报价、回款、佣金等本地金额加减场景中统一用 currency() 封装运算。
技能介绍
问题:分位上的尾差
在 CRM 的报价、回款、佣金场景里,金额常常在本地做加减:报价行合计、含税与未税累加、回款流水里已收与未收的核对。这类代码很容易写成 a + b 这样的裸浮点运算,于是 0.1 + 0.2 得到 0.30000000000000004,展示到分位时就会出现 ¥0.30000000000000004,或者四舍五入后与手工核算对不上。金额是业务数据,一旦进入 UI 或对账单,误差就不再是「显示问题」,而是信任问题。
技能如何工作
核心思路只有一条:所有业务金额先经 currency() 包装,再做运算,展示统一走 .format() 或等价的 toFixed(2)。
具体能力包括:
- 封装入口:安装
currency.js后封装cny、sumAmounts、quoteTotal,列表与表单的金额字段统一调用,避免局部混用裸number加法。 - 稳定分位:默认 2 位小数输出,
0.1 + 0.2经封装后展示为¥0.30;多行报价合计与手工计算一致。 - 币种可配置:符号默认
¥或空,按项目 UI 设定,例如$、€。 - 可读错误:输入非法时返回可读错误信息,不会把未捕获异常抛到 UI。
落地时建议按三步走:先封装好金额工具,再写自测用例验证 0.1 + 0.2 与多行合计,最后把列表和表单里的金额字段逐个替换为封装调用。
适用边界
- 不做汇率换算:技能不发起任何网络请求,跨币种的实时折算需要另行处理。
- 与公式求值分工:复杂表达式交给 mathjs(安全公式求值);金额累加优先用
currency.js,两者不要混在同一个通道里。 - 不要绕过封装:在封装之外写
total += row.amount这类裸累加,会把前面的保证全部作废。 - 适合本地、单币种、以分为最小粒度的加减与展示;分布式分账、事务一致性等问题不在本技能范围内。
使用场景
- CRM 报价行合计含税与未税累加,需避免裸浮点误差
- 回款流水核对已收与未收金额,要求分位展示稳定
- 佣金核算时多行金额累加,需与手工计算一致
- 本地单币种金额加减,需统一封装避免混用裸 number
适合人员
- CRM 前端工程师,需要确保报价、回款金额展示无误差
- 财务系统开发者,处理多行金额累加与对账逻辑
- 业务应用工程师,在表单和列表中统一金额字段处理
- 本地工具开发者,需要高精度货币计算与稳定分位输出