金額大寫轉換輸出

SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** 物件: 使用者自訂函數 dbo.emisCUAmount 指令碼日期: 2003/9/23 ******/ --撰寫日期: 2003.9.23 --作者: FUSBLUE --功能: 小寫金額轉換大寫 --變數: @n_LowerMoney 小寫金額 ALTER FUNCTION dbo.emisCUAmount (@n_LowerMoney numeric(15,2),@v_TransType int) RETURNS VARCHAR(200) AS BEGIN Declare @v_LowerStr VARCHAR(200) -- 小寫金額 Declare @v_UpperPart VARCHAR(200) Declare @v_UpperStr VARCHAR(200) -- 大寫金額 Declare @i_I int set @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,2))) -- 四舍五入為指定的精度並刪除數據左右空格 set @i_I = 1 set @v_UpperStr = '' while ( @i_I <= len(@v_LowerStr)) begin select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1) WHEN '.' THEN '元' WHEN '0' THEN '零' WHEN '1' THEN '壹' WHEN '2' THEN '貳' WHEN '3' THEN '參' WHEN '4' THEN '肆' WHEN '5' THEN '伍' WHEN '6' THEN '陸' WHEN '7' THEN '柒' WHEN '8' THEN '捌' WHEN '9' THEN '玖' END + case @i_I WHEN 1 THEN '分' WHEN 2 THEN '角' WHEN 3 THEN '' WHEN 4 THEN '' WHEN 5 THEN '拾' WHEN 6 THEN '佰' WHEN 7 THEN '仟' WHEN 8 THEN '萬' WHEN 9 THEN '拾' WHEN 10 THEN '佰' WHEN 11 THEN '仟' WHEN 12 THEN '億' WHEN 13 THEN '拾' WHEN 14 THEN '佰' WHEN 15 THEN '仟' WHEN 16 THEN '萬' ELSE '' END set @v_UpperStr = @v_UpperPart + @v_UpperStr set @i_I = @i_I + 1 end if ( 0 = @v_TransType) begin set @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整') set @v_UpperStr = REPLACE(@v_UpperStr,'零分','整') set @v_UpperStr = REPLACE(@v_UpperStr,'零角','零') set @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬零元','億元') set @v_UpperStr = REPLACE(@v_UpperStr,'億零萬零元','億元') set @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬','億') set @v_UpperStr = REPLACE(@v_UpperStr,'零萬零元','萬元') set @v_UpperStr = REPLACE(@v_UpperStr,'萬零元','萬元') set @v_UpperStr = REPLACE(@v_UpperStr,'零億','億') set @v_UpperStr = REPLACE(@v_UpperStr,'零萬','萬') set @v_UpperStr = REPLACE(@v_UpperStr,'零元','元') set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零') end -- 對壹元以下的金額的處理 if ( '元' = substring(@v_UpperStr,1,1)) begin set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1)) end if ( '零' = substring(@v_UpperStr,1,1)) begin set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1)) end if ( '角' = substring(@v_UpperStr,1,1)) begin set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1)) end if ( '分' = substring(@v_UpperStr,1,1)) begin set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1)) end if ('整' = substring(@v_UpperStr,1,1)) begin set @v_UpperStr = '零元整' end return @v_UpperStr END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`BigDecimal` 是 Java 中用于表示任意精度的十进制数的一种数据类型,它适用于需要高精度计算的应用场景,比如财务应用、货币计算等。而将 `BigDecimal` 数字转换成汉字金额大写,则是一个常见的需求,例如在中国的银行系统、会计软件等中。 将 `BigDecimal` 转换为汉字金额大写的过程可以分为几个步骤: ### 步骤一:获取数值部分 首先,从 `BigDecimal` 对象中提取出数值部分。这通常涉及去除小数点后的所有零,并确保有小数部分的数字存在。 ```java BigDecimal number = new BigDecimal("1234567890.12345"); String numStr = number.toPlainString(); ``` ### 步骤二:处理整数部分 对于整数部分,我们通常会采用分组的方式,每三位一组,并在每个组之间添加逗号。之后再将其转化为汉字。 ```java int intValue = Integer.parseInt(numStr.replaceAll("\\.", "")); StringBuilder chineseIntPart = new StringBuilder(); while (intValue > 0) { int temp = intValue % 1000; if (chineseIntPart.length() != 0) { chineseIntPart.insert(0, ", "); } String partInChinese = convertToChinese(temp); chineseIntPart.insert(0, partInChinese + "元"); intValue /= 1000; } ``` 这里需要定义 `convertToChinese(int)` 函数,将整数部分转化成相应的汉字表达。 ### 步骤三:处理小数部分 接着处理小数部分。小数点前需要特别注意,通常需要在其前面加上“点”。 ```java StringBuilder chineseDecPart = new StringBuilder("."); if (numStr.contains(".")) { chineseDecPart.append("点").append(convertToChinese(number.remainder(BigDecimal.ONE).multiply(new BigDecimal("100")).intValue())); } ``` ### 步骤四:组合结果并返回 最后,将整数和小数部分拼接起来,并考虑到人民币的大写规则(如“壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分”),完整输出。 ```java String result = chineseIntPart.toString() + chineseDecPart.toString(); return result.replace("零", "").trim(); // 这里移除不必要的"零" ``` ### 相关问题: 1. **如何实现 `convertToChinese(int)` 函数?** - 实现这个函数需要了解中文对数的命名规则,比如将数字1到9翻译成对应的汉字,然后基于这些基本单位构建更长的数字名称。 2. **如何优化处理过程以提高效率?** - 可以考虑缓存已经翻译好的数字集合,减少重复计算时间。同时,优化字符串操作和数字处理的算法。 3. **遇到特殊情况如何处理?** - 需要考虑一些特殊场景,如输入非数字、负数、非常大的数字等边缘情况,并适当地返回错误信息或默认值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值