金额大写:数值转换为会计专用样式的实用方法-综合交流区论坛-低代码平台-本牛千智|专注WorkFine

金额大写:数值转换为会计专用样式的实用方法

金额大写:数值转换为会计专用样式的实用方法

在财务与会计领域,将数值转换为大写金额格式是一项基础且重要的技能。本文旨在介绍两种高效、准确的方法,帮助读者轻松掌握这一技巧,确保财务数据的规范性与准确性。无论是初学者还是资深从业者,都能从中受益,提升工作效率。

效果演示

首先看下效果,两种方法效果相同,一般使用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->金额大写模板

相关文章

请登录后发表评论

    请登录后查看回复内容