计算工具 · 数学计算

大写金额

阿拉伯数字→人民币大写(防篡改)

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 61 次使用
财政部 / 人民银行规范 · 支票·合同·发票通用 · 纯本地不上传
阿拉伯数字 amount
人民币大写 capital
填写格式(顶格 · 字间距防加字篡改)
就绪 · 输入即转,整数部分按字符处理可至京级,零规则全规范
大写规则 · 防篡改用途(财政部 / 人民银行)

数字大写零 壹 贰 叁 肆 伍 陆 柒 捌 玖

单位拾 佰 仟 万 亿(小数:角 / 分);元位规范用「」,整数尾加「

零的合并连续多个零只写一个「零」,每节末尾的零不写、节间断档需补「零」(如 105000 = 壹拾万伍仟圆整)

角分规则有分无角写「圆X分」(10.05 = 壹拾圆零伍分);有角无分写「X角」(10.50 = 壹拾圆伍角整)

防篡改大写笔画繁、不可加笔改数,顶格书写、字间留距杜绝前后添字,是支票/合同/发票防篡改的法定写法

处理范围支持负数、四舍五入到分;整数部分按字符处理,可至京级(远超万亿)

第一节

关于本工具

About

财务人员填报销单、合同金额大写时,最怕的是“壹贰叁”写错一位整单重来。这个工具把阿拉伯数字直接转成《支付结算办法》规定的标准大写格式,支持分、角、元到亿级,并自动补“整”字——填支票、开发票、做对账单,复制结果就能用。所有转换在浏览器内完成,数字不上传服务器。

使用场景

工程款结算单

装修公司提交的工程进度款结算单上,小写数字「126,800.00」被手改成了「196,800.00」。项目经理和业主各执一词。用本工具将阿拉伯数字「126800」和「196800」分别转为大写「壹拾贰万陆仟捌佰元整」和「壹拾玖万陆仟捌佰元整」,两份金额在纸面上一目了然,手改痕迹无法在大写数字上隐藏,纠纷当场化解。

借款借据防赖账

朋友借款 3 万元,手写借据上小写「30000」后面多写一个 0 变成「300000」的风险始终存在。出借人当场用本工具将「30000」转为大写「叁万元整」,打印出来贴在借据下方双方签字。日后若对方声称「借的是叁拾万」,大写数字的防篡改特性直接堵死争议空间。

合同金额核验

法务审核采购合同时,发现正文大写金额「贰拾叁万肆仟元整」与附件报价单小写「234,000.00」一致,但财务系统里录入的是「243,000.00」。用本工具将小写「234000」和「243000」分别转大写,贴在审核意见旁,让业务部门一眼看清是录入错误还是报价单有误,避免签字后才发现金额不符。

发票报销附单

财务要求所有报销单上金额必须同时填写小写和大写,出差回来一堆出租车票、餐饮票,每张小票金额不同。用本工具逐笔输入小写数字,批量复制出对应大写「壹佰贰拾叁元整」「伍拾陆元整」等,直接粘贴到报销单的「大写金额」栏,不再担心手写大写时写错位或漏写「整」字被退单。

投标书密封报价

投标截止前 2 小时,商务发现报价函中小写金额「1,580,000」的「万」位数字有点模糊,担心评委误读为「1,850,000」。紧急用本工具将「1580000」转为大写「壹佰伍拾捌万元整」,打印替换原页。大写数字每个字独立,不会因印刷模糊或手写连笔产生歧义,确保报价不被废标。

对比矩阵

维度本工具在线转换站手工书写
防篡改结果不可编辑,直接复制使用部分站点结果可被修改后复制手写易涂改、伪造
速度输入即出,无网络延迟需加载页面、等待响应需逐字核对,慢且易错
离线可用纯浏览器运行,断网也能用必须联网纸笔即可,但需人工
大小限制无限制,支持任意长度数字部分站点有字符数上限受书写空间和精力限制
注册收费免费,无需注册部分站点免费但需登录零成本,但耗时
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框键入阿拉伯数字(如 12345.67),右侧实时预览区同步显示对应大写金额
  2. 2点击「转为大写」按钮,下方结果区输出标准人民币大写格式(含圆角分)
  3. 3核对结果无误后,点击结果区右侧的「复制」图标,大写金额自动存入剪贴板

输入输出示例

输入输出说明
100壹佰元整常规:整数金额,验证基本转换和末尾“整”字处理
1234.56壹仟贰佰叁拾肆元伍角陆分常规:带角和分,验证角分单位正确拼接
0.01壹分边界:不足1元,验证零元不输出,直接显示分
1000000000.00壹拾亿元整边界:亿级整数,验证大数单位“亿”正确出现,无多余零
10.10壹拾元壹角整易错:角位非零、分位为零,验证“角”后是否加“整”
0.00零元整边界:零金额,验证输出不为空,且格式正确
100.01壹佰元零壹分易错:元位非零、角位为零、分位非零,验证中间是否补“零”

常见错误对照

1.金额末尾零被遗漏

✗ 错误1230 → 壹仟贰佰叁拾元整
✓ 修复1230 → 壹仟贰佰叁拾元零角零分

人民币大写规范要求角分位必须体现,即使为零也要写'零角零分',否则金额可被篡改(如加'壹分')。

2.连续零只写一个'零'

✗ 错误10001 → 壹万零零零壹元整
✓ 修复10001 → 壹万零壹元整

《支付结算办法》规定:阿拉伯数字中间连续几个'0',中文大写只写一个'零'字。

3.万位和元位都是零时漏写'万'

✗ 错误100000 → 壹拾元整
✓ 修复100000 → 壹拾万元整

万位为零但亿位或千位有值时,'万'字必须保留,否则金额单位丢失。

4.角位为零时写'零角'而非'零'

✗ 错误12.00 → 壹拾贰元零
✓ 修复12.00 → 壹拾贰元整

角位为零且分位也为零时,应写'整'结束;只有角位为零、分位非零时才写'零'。

5.元位为零时省略'元'字

✗ 错误0.50 → 伍角
✓ 修复0.50 → 人民币伍角

无元位金额必须加'人民币'前缀,否则无法区分是'伍角'还是'伍角元'。

6.负号处理不当

✗ 错误-500 → 负伍佰元整
✓ 修复-500 → (无效金额,不支持负数)

人民币大写规范不适用于负数金额,支票、发票等场景负数应直接退回。

7.小数部分超过两位未截断

✗ 错误12.345 → 壹拾贰元叁角肆分伍厘
✓ 修复12.345 → 壹拾贰元叁角肆分(自动截断)

人民币最小单位为分,厘位不参与大写,工具应自动截断至两位小数。

8.金额前多余空格导致解析失败

✗ 错误 1234.56 → 壹仟贰佰叁拾肆元伍角陆分
✓ 修复1234.56 → 壹仟贰佰叁拾肆元伍角陆分

部分用户习惯在数字前加空格,工具应自动 trim 输入,否则可能误判为非法字符。

第三节

工作原理

How It Works

核心公式

大写金额 = 数字分段 → 每段加单位 → 补零规则 → 拼接

变量说明

  • 数字分段整数部分按亿/万/个位分段
  • 每段加单位每段后加亿/万/元,每位数后加拾/佰/仟
  • 补零规则连续零只写一个'零',末尾零省略
  • 拼接按顺序组合各段,加'整'结尾

示例

数字 100200030.45:整数部分分三段:1亿、0020万、0030元。1亿→壹亿;0020万→零零贰拾万→贰拾万(连续零缩为壹个零);0030元→零零叁拾元→叁拾元;角分:0.45→肆角伍分。拼接:壹亿零贰拾万零叁拾元肆角伍分。

输入阿拉伯数字(如 1234.56)拆解整数/小数(元角分分离)逐位查表转换(数字→大写汉字)组合单位(拾佰仟万亿)校验规则(零补位/去重)输出大写金额(壹仟贰佰叁拾肆元伍角陆分)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

def num_to_rmb(amount: float) -> str: """将数字金额转换为人民币大写,保留两位小数""" digits = '零壹贰叁肆伍陆柒捌玖' units = ['元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿'] # 处理整数部分 integer_part = int(amount) result = '' if integer_part == 0: result = '零元' else: i = 0 while integer_part > 0: result = digits[integer_part % 10] + units[i] + result integer_part //= 10 i += 1 # 处理小数部分 decimal_part = round((amount - int(amount)) * 100) if decimal_part == 0: result += '整' else: jiao = decimal_part // 10 fen = decimal_part % 10 if jiao > 0: result += digits[jiao] + '角' if fen > 0: result += digits[fen] + '分' return result # 示例 print(num_to_rmb(1234.56)) # 壹仟贰佰叁拾肆元伍角陆分 print(num_to_rmb(100.00)) # 壹佰元整
/** * 将数字金额转换为人民币大写 * @param {number} amount - 金额数字 * @returns {string} 人民币大写字符串 */ function numToRmb(amount) { const digits = '零壹贰叁肆伍陆柒捌玖'; const units = ['元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿']; // 整数部分 let integerPart = Math.floor(amount); let result = ''; if (integerPart === 0) { result = '零元'; } else { let i = 0; while (integerPart > 0) { result = digits[integerPart % 10] + units[i] + result; integerPart = Math.floor(integerPart / 10); i++; } } // 小数部分 const decimalPart = Math.round((amount - Math.floor(amount)) * 100); if (decimalPart === 0) { result += '整'; } else { const jiao = Math.floor(decimalPart / 10); const fen = decimalPart % 10; if (jiao > 0) result += digits[jiao] + '角'; if (fen > 0) result += digits[fen] + '分'; } return result; } // 示例 console.log(numToRmb(1234.56)); // 壹仟贰佰叁拾肆元伍角陆分 console.log(numToRmb(100.00)); // 壹佰元整
package main import ( "fmt" "math" ) func numToRmb(amount float64) string { digits := []string{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"} units := []string{"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"} // 整数部分 integerPart := int(math.Floor(amount)) result := "" if integerPart == 0 { result = "零元" } else { i := 0 for integerPart > 0 { result = digits[integerPart%10] + units[i] + result integerPart /= 10 i++ } } // 小数部分 decimalPart := int(math.Round((amount - math.Floor(amount)) * 100)) if decimalPart == 0 { result += "整" } else { jiao := decimalPart / 10 fen := decimalPart % 10 if jiao > 0 { result += digits[jiao] + "角" } if fen > 0 { result += digits[fen] + "分" } } return result } func main() { fmt.Println(numToRmb(1234.56)) // 壹仟贰佰叁拾肆元伍角陆分 fmt.Println(numToRmb(100.00)) // 壹佰元整 }
public class RmbConverter { public static String numToRmb(double amount) { String[] digits = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; String[] units = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"}; // 整数部分 long integerPart = (long) Math.floor(amount); StringBuilder result = new StringBuilder(); if (integerPart == 0) { result.append("零元"); } else { int i = 0; while (integerPart > 0) { result.insert(0, digits[(int)(integerPart % 10)] + units[i]); integerPart /= 10; i++; } } // 小数部分 int decimalPart = (int) Math.round((amount - Math.floor(amount)) * 100); if (decimalPart == 0) { result.append("整"); } else { int jiao = decimalPart / 10; int fen = decimalPart % 10; if (jiao > 0) result.append(digits[jiao]).append("角"); if (fen > 0) result.append(digits[fen]).append("分"); } return result.toString(); } public static void main(String[] args) { System.out.println(numToRmb(1234.56)); // 壹仟贰佰叁拾肆元伍角陆分 System.out.println(numToRmb(100.00)); // 壹佰元整 } }
<?php function numToRmb($amount) { $digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; $units = ['元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿']; // 整数部分 $integerPart = (int) floor($amount); $result = ''; if ($integerPart == 0) { $result = '零元'; } else { $i = 0; while ($integerPart > 0) { $result = $digits[$integerPart % 10] . $units[$i] . $result; $integerPart = (int)($integerPart / 10); $i++; } } // 小数部分 $decimalPart = (int) round(($amount - floor($amount)) * 100); if ($decimalPart == 0) { $result .= '整'; } else { $jiao = (int)($decimalPart / 10); $fen = $decimalPart % 10; if ($jiao > 0) $result .= $digits[$jiao] . '角'; if ($fen > 0) $result .= $digits[$fen] . '分'; } return $result; } echo numToRmb(1234.56) . "\n"; // 壹仟贰佰叁拾肆元伍角陆分 echo numToRmb(100.00) . "\n"; // 壹佰元整 ?>
fn num_to_rmb(amount: f64) -> String { let digits = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; let units = ["元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"]; // 整数部分 let integer_part = amount.floor() as u64; let mut result = String::new(); if integer_part == 0 { result.push_str("零元"); } else { let mut n = integer_part; let mut i = 0; while n > 0 { result = format!("{}{}{}", digits[(n % 10) as usize], units[i], result); n /= 10; i += 1; } } // 小数部分 let decimal_part = ((amount - amount.floor()) * 100.0).round() as u64; if decimal_part == 0 { result.push_str("整"); } else { let jiao = decimal_part / 10; let fen = decimal_part % 10; if jiao > 0 { result.push_str(&format!("{}角", digits[jiao as usize])); } if fen > 0 { result.push_str(&format!("{}分", digits[fen as usize])); } } result } fn main() { println!("{}", num_to_rmb(1234.56)); // 壹仟贰佰叁拾肆元伍角陆分 println!("{}", num_to_rmb(100.00)); // 壹佰元整 }
第五节

常见问题

Q & A
我填了个很大的数,比如几百亿,能转吗?

可以。本工具纯前端处理,不设数值上限,理论上能处理 JavaScript Number 安全范围内的整数(约 9007199254740991),日常财务中的千万、亿、百亿级金额完全足够。超过安全范围的数字建议分笔处理,避免精度丢失。

输入框里能不能直接粘贴带逗号的数字,比如 1,234,567.89?

可以。工具在转换前会自动过滤掉千位分隔符(逗号),所以直接粘贴财务表格里的格式化数字没问题。同理,粘贴进来时如果含空格或人民币符号 ¥,也会自动清除,只保留纯数字和小数点。

为什么我输入 100.10 转出来是“壹佰元壹角”,不是“壹佰元壹角整”?

这是人民币大写规范中的常见差异。根据《中国人民银行支付结算办法》,角位有数字且分位无数字时,可以不写“整”(或“正”)。本工具遵循这个规则:角位非零、分位为零时,输出“X角”,不加“整”。如果希望强制加“整”,可以手动在结果后补上。

我输入 0.01 转出来是“壹分”,没有“零元”,是不是漏了?

没有漏。人民币大写规范里,当金额不足 1 元时,中文大写可以在“分”前不写“零元”,直接写“X分”。本工具输出的是最精简的合法写法。如果业务要求必须出现“零元”,可以手动在结果前面加上“零元”二字。

这个工具转出来的大写,财务入账能用吗?银行认不认?

本工具严格遵循《中国人民银行支付结算办法》附件的《正确填写票据和结算凭证的基本规定》生成大写,包括“壹贰叁肆伍陆柒捌玖拾佰仟万亿”的正字写法、以及“整”字的省略规则。生成的文本可直接用于支票、发票、报销单等财务凭证。建议在使用前对照原始数字复核一遍(工具结果区会同时显示原数字,方便对比)。

我把数字填进去,会不会上传到服务器?公司数据怕泄露。

不会。本工具标注为 FE(前端实现),所有转换逻辑都在浏览器本地执行,数字不会发送到任何服务器。输入框里的内容仅在你自己的电脑上处理,关闭页面即消失。即使断网,只要页面已加载完成,也能正常转换。

为什么我输入 9999999999.99 转出来有“拾亿”而不是“十亿”?

人民币大写中,数字“10”在亿、万、元等单位前必须写成“壹拾”,不能简写为“拾”。所以 9999999999.99 中的“玖拾玖亿”是正确的,其中“玖拾”对应 99。如果看到“拾亿”出现在数字中间,那是正确的规范写法;如果出现在开头(如 10 亿写成“拾亿”),则本工具会输出“壹拾亿”,不会出现“拾亿”开头的情况。

我想转一个金额,但里面有数字又有汉字,比如“12345元”,怎么处理?

本工具只接受纯阿拉伯数字输入。如果已经混写了汉字或单位,需要先手动去掉汉字部分,只保留数字和小数点。例如“12345元”改成“12345”,“壹仟元”改成“1000”。建议在输入前先把原始金额中的中文内容清理干净,否则工具会提示输入不合法。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭