更新记录
1.0.0(2026-09-15)
下载此版本
初版
平台兼容性
uni-app
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
其他
SL-WX-Amount 金额大写转换组件
组件简介
将数字金额自动转换为人民币大写(中文大写数字)的展示组件。支持整数、小数(角/分)、负数,内置完整的零值处理规则(连续零合并、节间零补位)。H5 / 微信小程序通用。
设计说明:组件默认渲染「前缀 + 大写金额」文本,同时通过 default 插槽暴露 amount、upper、prefix 三个作用域参数,业务侧可自由排版(如财务票据、合同模板等场景)。
目录结构
components/SL-WX-Amount
└── SL-WX-Amount.vue
核心特性
- 完整人民币大写转换:支持
零壹贰叁肆伍陆柒捌玖 + 拾佰仟万亿 单位体系。
- 小数处理:自动拆分角/分,无小数时追加"整"字。
- 负数支持:负数前自动加"负"字前缀。
- 零值规则:正确处理连续零合并(如
1000001 → 壹佰万零壹元整)、节间零补位(如 10001000 → 壹仟万零壹万元整)。
- 插槽自定义:
default 插槽透传 amount(数值)、upper(大写字符串)、prefix(前缀),可完全自定义布局。
- 样式可配置:
color / fontSize 控制大写文本样式,showPrefix 控制是否显示前缀。
Props
| 属性 |
类型 |
默认值 |
说明 |
amount |
Number/String |
0 |
金额数值,支持数字或数字字符串 |
prefix |
String |
'人民币' |
大写金额前缀文本 |
showPrefix |
Boolean |
true |
是否显示前缀 |
color |
String |
'#333' |
大写金额文本颜色 |
fontSize |
Number |
32 |
大写金额字体大小(rpx) |
Slots
| 插槽名 |
作用域参数 |
说明 |
default |
{ amount: Number, upper: String, prefix: String } |
自定义金额展示布局。amount 为数值,upper 为大写字符串,prefix 为前缀 |
Methods
| 方法名 |
参数 |
返回值 |
说明 |
convert |
Number 金额 |
String |
静态转换方法,返回人民币大写字符串 |
// 在父组件中调用
this.$refs.amountRef.convert(12345.67) // => '壹万贰仟叁佰肆拾伍元陆角柒分'
转换规则说明
基本单位
| 数字 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
| 大写 |
零 |
壹 |
贰 |
叁 |
肆 |
伍 |
陆 |
柒 |
捌 |
玖 |
| 位权 |
个 |
拾 |
佰 |
仟 |
万 |
亿 |
万亿 |
| 大写 |
(无) |
拾 |
佰 |
仟 |
万 |
亿 |
万亿 |
小数规则
| 情况 |
结果 |
| 无小数 |
追加"整",如 100 → 壹佰元整 |
| 仅角 |
如 0.5 → 零元伍角 |
| 角+分 |
如 12345.67 → 壹万贰仟叁佰肆拾伍元陆角柒分 |
| 仅分 |
如 0.05 → 零元零伍分 |
| 角为0有分 |
如 1.01 → 壹元零壹分 |
零值处理规则
| 输入 |
输出 |
说明 |
0 |
零元整 |
零值特殊处理 |
100 |
壹佰元整 |
末尾零不读 |
1001 |
壹仟零壹元整 |
中间连续零合并为一个"零" |
1000001 |
壹佰万零壹元整 |
跨节(万节全零)补一个"零" |
10001000 |
壹仟万零壹万元整 |
万节内部前导零补位 |
-500 |
负伍佰元整 |
负数加"负"前缀 |
使用示例
示例 1:基础用法
<template>
<sl-wx-amount :amount="12345.67" />
<!-- 渲染:人民币 壹万贰叁佰肆拾伍元陆角柒分 -->
</template>
<script>
import SlWxAmount from '@/components/SL-WX-Amount/SL-WX-Amount.vue'
export default {
components: { SlWxAmount }
}
</script>
示例 2:隐藏前缀 + 自定义颜色
<sl-wx-amount :amount="100000" :show-prefix="false" color="#c0392b" :font-size="40" />
<!-- 渲染:壹拾万元整 (红色、40rpx) -->
示例 3:插槽自定义(财务票据样式)
<sl-wx-amount :amount="amount" :show-prefix="false">
<template v-slot:default="{ upper }">
<view class="invoice-amount">
<text class="invoice-label">金额大写</text>
<text class="invoice-value">{{ upper }}</text>
<text class="invoice-num">¥ {{ amount.toFixed(2) }}</text>
</view>
</template>
</sl-wx-amount>
示例 4:调用 convert 方法
<sl-wx-amount ref="amountRef" :amount="0" :show-prefix="false" />
<script>
export default {
methods: {
getUpper() {
return this.$refs.amountRef.convert(99999999.99)
// => '玖仟玖佰玖拾玖万玖玖佰玖拾玖元玖角玖分'
}
}
}
</script>
注意事项
-
精度限制:内部使用 Math.round(amount * 100) 处理小数,适用于两位小数的金额场景。超过两位小数的值会被四舍五入到分。
-
极大数值:支持到"万亿"级别(SEC_UNITS = ['', '万', '亿', '万亿'])。超过万亿的数值,万亿以上部分不再追加单位,但数字仍正确转换。
-
非法输入:传入 NaN、null、undefined 时返回空字符串 ''。
-
字符串输入:amount 支持字符串类型(如 '12345.67'),内部自动 parseFloat 转换。