在财务与会计领域,将数值转换为大写金额格式是一项基础且重要的技能。本文旨在介绍两种高效、准确的方法,帮助读者轻松掌握这一技巧,确保财务数据的规范性与准确性。无论是初学者还是资深从业者,都能从中受益,提升工作效率。
效果演示
首先看下效果,两种方法效果相同,一般使用Excel公式即可,特殊场景可使用标量函数
Excel表格函数
=CAMOUNT(数值字段)
SQL标量函数
- 使用下方代码创建标量函数
复制下方代码在对应的数据库执行
CREATE FUNCTION dbo.ConvertToIntRMB(@input DECIMAL(18,2))
RETURNS NVARCHAR(MAX)
AS
BEGIN
--声明三个变量@result:函数返回;@digits:存放映射关系;@unit:存放单位
DECLARE @result NVARCHAR(MAX) = '';
DECLARE @digits TABLE (Digit INT, Chinese NVARCHAR(10));
DECLARE @unit TABLE (UnitPosition INT, UnitName NVARCHAR(10));
DECLARE @unit2 TABLE (UnitPosition INT, UnitName NVARCHAR(10));
--给表插入数据
INSERT INTO @digits (Digit, Chinese)
VALUES
(0, '零'), (1, '壹'), (2, '贰'), (3, '叁'), (4,'肆'), (5, '伍'),(6, '陆'), (7, '柒'), (8, '捌'), (9, '玖');
INSERT INTO @unit (UnitPosition, UnitName)
VALUES
(1, ''), (2, '拾'), (3, '佰'), (4, '仟'), (5, '万'), (6, '拾万'), (7, '佰万'), (8, '仟万'), (9, '亿');
INSERT INTO @unit2 (UnitPosition, UnitName)
VALUES
(1, '分'), (2, '角');
--@position:记录位置用于获取单位
DECLARE @position INT = 1;
--@intNum:整数部分
DECLARE @intNum INT = CAST(@input AS INT);
--@decimalNum:小数部分
DECLARE @decimalNum INT = CAST((@input - @intNum) * 100 AS INT);
--开始逻辑部分
IF @intNum = 0
BEGIN
IF @decimalNum = 0
BEGIN
SET @result = '零元';
END
--只有小数部分
ELSE BEGIN
--小数记录位置用于获取单位
DECLARE @position2 INT = 1;
WHILE @decimalNum > 0
BEGIN
--拿出个位
DECLARE @digit2 INT = @decimalNum % 10;
--小数点左移一位
SET @decimalNum = @decimalNum / 10;
--根据记录位置获取单位
DECLARE @unitName2 NVARCHAR(10) = (SELECT UnitName FROM @unit2 WHERE UnitPosition = @position2);
--小写转换大写
DECLARE @chineseDigit2 NVARCHAR(10) = (SELECT Chinese FROM @digits WHERE Digit = @digit2);
--@position < 3防止跑出去
IF @digit2 > 0 AND @position < 3
BEGIN
SET @result = @chineseDigit2 + @unitName2 + @result;
END
SET @position2 = @position2 + 1;
END
END
END
--整数部分
ELSE BEGIN
--拿出个位,用于决定最后加上元还是元整
DECLARE @firstNum INT = @intNum % 10;
WHILE @IntNum > 0
BEGIN
--拿出个位
DECLARE @digit INT = @intNum % 10;
--整数部分小数点左移一位
SET @intNum = @intNum / 10;
--根据记录位置获取单位
DECLARE @unitName NVARCHAR(10) = (SELECT UnitName FROM @unit WHERE UnitPosition = @position);
--小写转换大写
DECLARE @chineseDigit NVARCHAR(10) = (SELECT Chinese FROM @digits WHERE Digit = @digit);
--给@result赋值
IF @digit > 0
BEGIN
SET @result = @chineseDigit + @unitName + @result;
END
--单位增大
SET @position = @position + 1;
END
--整数部分最后加上元或元整
SET @result = @result + '元';
IF @firstNum = 0 AND @decimalNum = 0
BEGIN
SET @result = @result + '整';
END
END
--小数部分
IF @decimalNum > 0
BEGIN
--小数记录位置用于获取单位
DECLARE @position3 INT = 1;
--记录小数
DECLARE @decimalResult NVARCHAR(500)= '';
WHILE @decimalNum > 0
BEGIN
--拿出个位
DECLARE @digit3 INT = @decimalNum % 10;
--小数点左移一位
SET @decimalNum = @decimalNum / 10;
--根据记录位置获取单位
DECLARE @unitName3 NVARCHAR(10) = (SELECT UnitName FROM @unit2 WHERE UnitPosition = @position3);
--小写转换大写
DECLARE @chineseDigit3 NVARCHAR(10) = (SELECT Chinese FROM @digits WHERE Digit = @digit3);
--@position3 < 3防止跑出去
IF @digit3 > 0 AND @position3 < 3
BEGIN
SET @decimalResult = @chineseDigit3 + @unitName3 + @decimalResult;
END
SET @position3 = @position3 + 1;
END
SET @result = @result + @decimalResult;
END
RETURN @result;
END;
代码并不唯一,也可自行百度到同功能代码,找个适合自己的即可
- 在WorkFine中应用
填充值处应用标量函数即可
公共账套
本案例来源于公共账套:202403
->金额大写
模板
相关文章
#RMB#大写#人民币#金额
请登录后查看回复内容