MSSQL 数字钱转化为大写
--说明:
--1.本函数范围从 毫 ~ 兆
--2.有四种精度(元,角 ,分,厘 ,毫)
--3.有三种进位规则(四舍五入,接舍去,非0就入)
--参数说明:dbo.MoneyToCapital( 数值 , 进位 , 精度)
--进位 (0 四舍五入, 1 直接舍去,2 非0就入)
--精确度 (0 元,1 角 ,2 分,3 厘 ,4 毫)
--------------------------------------------------------------------------------------------------------
--测试数据:
DECLARE @intNum decimal(38,4)
SET @intNum = 1123456780.2154
--SET @intNum = 1001
--SET @intNum = 100100
--SET @intNum = 1005001
--SET @intNum = 100.11
--SET @intNum = 100.00
--SET @intNum = 100.01
SET @intNum = 99999999999999.9999 -- 最大 <1百兆(精确到毫)
--SET @intNum = 10025.1234
--SET @intNum = 12345.6789
SELECT dbo.MoneyToCapital(@intNum,0,4)
--------------------------------------------------------------------------------------------------------
Go
CREATE FUNCTION MoneyToCapital
(
@mnyNumber decimal(38,4),
@intIsRound int = 0, -- 进位 (0 四舍五入, 1 直接舍去,2 非0就入)
@intPrecision int = 2 -- 精确度: 0 元,1 角 ,2 分,3 厘 ,4 毫
)
RETURNS nvarchar(50)
BEGIN
DECLARE @strReturn nvarchar(50)
DECLARE @strMoney varchar(50)
DECLARE @intLen int
DECLARE @strC1 char(1)
DECLARE @strC2 char(1)
DECLARE @strC3 char(1)
DECLARE @intJ int
DECLARE @necMoney decimal(38,4)
DECLARE @strMoneyUnit nvarchar(50)
DECLARE @strNumberCapital nvarchar(50)
SET @strMoneyUnit = '毫厘分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟'
SET @strNumberCapital = '零壹贰叁肆伍陆柒捌玖'
--0 的情况
IF @mnyNumber = 0 BEGIN
SET @strReturn = '零元整'
RETURN @strReturn
END
--超出范围 的情况
IF @mnyNumber < 0 OR @mnyNumber > 99999999999999.9999 BEGIN RETURN CAST(@mnyNumber AS varchar(50))
END
------进位 超出范围
IF @intIsRound<0 OR @intIsRound>2 BEGIN
SET @intIsRound = 0
END
------精确度 超出范围
IF @intPrecision<0 OR @intPrecision>4 BEGIN
SET @intPrecision = 2
END
IF @intIsRound =1 BEGIN--直接舍去 SET @mnyNumber = ROUND(@mnyNumber,2,1)
END
ELSE IF @intIsRound = 2 BEGIN--非0就入 SET @mnyNumber = ROUND(@mnyNumber,2)
END
ELSE BEGIN--四舍五入 SET @mnyNumber = ROUND(@mnyNumber,@intPrecision)
END SET @necMoney = @mnyNumber * POWER(10,@intPrecision) --精确度 @intPrecision
SET @strMoney = CAST(CAST(@necMoney AS bigint) AS varchar(50))
SET @intLen = LEN(@strMoney) --长度
SET @strMoney = REVERSE(@strMoney) --逆转
SET @strReturn='' SET @intJ = 1 -- @intPrecision 精确度: 0 元,1 角 ,2 分,3 厘 ,4 毫( 1 开始对应 毫)
WHILE @intJ <= @intLen BEGIN SET @strC1 = SUBSTRING(@strMoney,@intJ-1,1)
SET @strC2 = SUBSTRING(@strMoney,@intJ,1)
SET @strC3 = SUBSTRING(@strMoney,@intJ+1,1) SET @strReturn = SUBSTRING(@strNumberCapital , CAST(@strC2 AS int)+1 , 1) +SUBSTRING(@strMoneyUnit , @intJ+4-@intPrecision , 1) + @strReturn
SET @intJ = @intJ + 1
END --替换多余的部分
set @returnStr = replace(@returnStr,'零亿','零')
set @returnStr = replace(@returnStr,'零千','零')
set @returnStr = replace(@returnStr,'零百','零')
set @returnStr = replace(@returnStr,'零拾','零')
set @returnStr = replace(@returnStr,'零零零','零')
set @returnStr = replace(@returnStr,'零零','零')
set @returnStr = replace(@returnStr,'零万','万')
set @returnStr = replace(@returnStr,'零元','元')
set @returnStr = replace(@returnStr,'零角','零')
set @returnStr = replace(@returnStr,'零分','') while left(@returnStr,1) = '零'
Begin
set @returnStr = right(@returnStr,len(@returnStr)-1)
end
if ((left(@returnStr,1)='万'))
begin
set @returnStr = right(@returnStr,len(@returnStr)-1)
end
if ((left(@returnStr,1)='元'))
begin
set @returnStr = right(@returnStr,len(@returnStr)-1)
end
while left(@returnStr,1) = '零'
Begin
set @returnStr = right(@returnStr,len(@returnStr)-1)
end
while right(@returnStr,1) = '零'
Begin
set @returnStr = left(@returnStr,len(@returnStr)-1)
end set @returnStr = replace(@returnStr,'亿万','亿零')
set @returnStr = replace(@returnStr,'零元','元')
set @returnStr = replace(@returnStr,'零零零','零')
set @returnStr = replace(@returnStr,'零零','零') if (@returnStr='')
begin
set @returnStr = '零元'
end
if ((right(@returnStr,1)='元'))
begin
set @returnStr = @returnStr + '整'
end RETURN @strReturn
END --String1 = "零壹贰叁肆伍陆柒捌玖"
--String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分厘毫"
MSSQL 数字钱转化为大写的更多相关文章
- JAVA将数字钱数转换为大写
1.Java文件的编写 package com.cwai.xtag; import java.util.Scanner; public class Num2Rmb { private String[] ...
- Java将日期转化为大写格式(阿拉伯大写数字)
效果: 代码部分: public static void main(String[] args) { SimpleDateFormat sdf=new SimpleDateFormat("y ...
- C#小写数字金额转换成大写人民币金额的算法
C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...
- 算法--java实现将数字转换成人民币大写(迅雷面试题)
今天去迅雷面试,是个数字转换成人民币的算法题: public class Rmb { /** * 人民币的基本信息和操作 * * @author soyoungboy * @version 1.0 * ...
- js 将数字转换成人民币大写的方法
//将数字转换成人民币大写的方法 var digitUppercase = function (n) { var fraction = ['角', '分']; var digit = [ '零', ' ...
- C# 数字转换成汉字大写 数值转换成汉字大写
1.数字转换成汉字大写 public string NumToChinese(string x) { //数字转换为中文后的数组 //转载请注明来自 http://www.shang11.com st ...
- Python3.x:判断字符串是否为全数字、英文、大写、小写、空白字符
Python3.x:判断字符串是否为全数字.英文.大写.小写.空白字符 判断接字符串是否为数字: str = raw_input("please input the number:" ...
- js 将数字转换成中文大写
//完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五. const toChinesNum = ...
- php 把数字转化为大写中文
PHP 数字转大写中文 PHP入门小菜鸟一枚.下午要求写一个把数字转成大写中文的脚本,百度了一波,几十个博客和网站都是用的那四个代码,第一个运行不了,第二个有问题,不合要求,第三个第四个太长,懒得看, ...
随机推荐
- ADO.NET 快速入门(十一):连接池
这个示例演示了如何构建一个到数据源的连接池.你可以通过连接池部署高性能的应用程序.本例中使用连接串创建连接池,并且由 SqlConnection 自动管理. string connString; ...
- Android学习笔记(1)
几天开始看Mars老师的Java4Android视频教程. 开始几集都是介绍性的内容,我浏览了一下.主要是看了下Java变量部分. java变量主要由以下几种类型: 1.数值型 2.字符型 3.布尔型 ...
- HDU 5512 Meeting 博弈论
Meeting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5512 ...
- URAL 2047 Maths 打表 递推
MathsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action? ...
- linux后端运行(二)
在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台.导致无法退出root的. 输入命令:exit终端显示:There are stopped jobs. 解决方法:方法一.输入命令:jobs终 ...
- Android XML文件布局各个属性详解
第一常用类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android: ...
- 小白日记16:kali渗透测试之弱点扫描-openvas、nessus
漏洞扫描工具 1.openvas OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器.在kali上默认集成openvas.在kali上,配置相对简单[几乎每天都在更新] 实 ...
- 自问自答-hadoop在安全模式下究竟干了什么见不得人的事
本来想自己从网上搜集整理的,但是发现吴超写的刚刚好,不多不少,所以直接转载(图片失效了,用自己的图片) http://www.superwu.cn/2013/08/23/548/ 在hadoop集群的 ...
- CentOS(七)--Linux文件类型及目录配置
这篇随笔将会对Linux系统的文件类型以及Linux的目录结构进行详细补充(linux中目录管理和权限非常重要,特别是在linux安装数据库类软件). 一.Linux更改文件权限的两种方式 在之前的一 ...
- [转]Speeding Up Websites With YSlow
本文转自:http://net.tutsplus.com/tutorials/other/speeding-up-websites-with-yslow/ We all know there are ...