原创文章,转载请注明出处:http://montage.iteye.com/blog/502784
最大支持行千兆
大至思想都写在注释里面了,欢迎大家测试,有bug提交哦~
package com.ubi.utils
{
/**
* 主要功能把阿拉伯数字单位转换成中文大写
* @author marcoLee
*/
public class MoneyUtils
{
//1:个,2:十,3:百,4:千,5:万,6:十万,7:百万,8:千万,9:亿,10:十亿,11:百亿,12:千亿,13:兆, 14:十兆, 15:百兆, 16:千兆
public static const NUM_CN:Array = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "镹"];
public static const DECIMAL_UNITS:Array = ["角", "分"];
public static const LEVELS:Array = ["元", "万", "亿", "兆"];
public static const UNITS:Array = ["千", "百", "拾"];
public function MoneyUtils()
{
}
/**
* 把阿拉伯数字单位转换成中文大写
* @param num 阿拉伯数字
* @return 中文大写
*/
public static function toCNUpper( num:Number ):String
{
if( num == 0 )
return NUM_CN[0];
var count:int = getUnitCount( num );
var numStr:String = num.toFixed(2);
var pos:int = numStr.indexOf(".");
var dotLeft:String = pos == -1 ? numStr : numStr.substring(0, pos);
var dotRight:String = pos == -1 ? "" : numStr.substring(pos + 1, numStr.length);
if( dotLeft.length > 16 )
throw new Error("数字太大,无法处理!");
var cnMoney:String = convertIntegerStr(dotLeft) + convertDecimalStr(dotRight);
return cnMoney;
}
/**
* 把数字中的整数部分进行转换
* @param str
* @return
*/
public static function convertIntegerStr( str:String ):String
{
var tCount:int = Math.floor( str.length / 4 );
var rCount:int = str.length % 4;
var nodes:Array = [];
if( rCount > 0 )
nodes.push( convertThousand(str.substr(0, rCount), tCount ));
for( var i:int = 0; i < tCount; i++ )
{
var startIndex:int = rCount + i*4;
var num:String = str.substring( startIndex, startIndex + 4 );
nodes.push( convertThousand(num, tCount - i - 1) );
}
return convertNodes( nodes );
}
private static function convertNodes( nodes:Array ):String
{
var str:String = "";
var beforeZero:Boolean;
for( var i:int = 0; i < nodes.length; i++)
{
var node:ThousandNode = nodes[i] as ThousandNode;
if( ( beforeZero && node.desc.length > 0 ) ||
( node.beforeZero && node.desc.length > 0 && str.length > 0))
str += NUM_CN[0];
str += node.desc;
if( node.afterZero && i < nodes.length - 1 )
beforeZero = true;
else if( node.desc.length > 0 )
beforeZero = false;
}
return str;
}
/**
* 对四位数进行处理,不够自动补起
* @param num
* @param level
* @return
*/
private static function convertThousand( num:String, level:int):ThousandNode
{
var node:ThousandNode = new ThousandNode();
var len:int = num.length;
for( var i:int = 0; i < 4 - len; i++ )
num = "0" + num;
var n1:int = int( num.charAt(0) );
var n2:int = int( num.charAt(1) );
var n3:int = int( num.charAt(2) );
var n4:int = int( num.charAt(3) );
if( n1 + n2 + n3 + n4 == 0 )
return node;
if( n1 == 0 )
node.beforeZero = true;
else
node.desc += NUM_CN[n1] + UNITS[0];
if( n2 == 0 && node.desc != "" && n3 + n4 > 0)
node.desc += NUM_CN[0];
else if( n2 > 0 )
node.desc += NUM_CN[n2] + UNITS[1];
if( n3 == 0 && node.desc != "" && n4 > 0)
node.desc += NUM_CN[0];
else if( n3 > 0 )
node.desc += NUM_CN[n3] + UNITS[2];
if( n4 == 0 )
node.afterZero = true;
else if( n4 > 0 )
node.desc += NUM_CN[n4];
if( node.desc.length > 0 )
node.desc += LEVELS[level];
return node;
}
/**
* 把数字中的小数部分进行转换
* @param str
* @return
*/
public static function convertDecimalStr( str:String ):String
{
var newStr:String = "";
for( var i:int = 0; i < str.length; i++ )
{
var n:int = int(str.charAt(i));
if( n > 0 )
newStr += NUM_CN[n] + DECIMAL_UNITS[i];
}
return newStr;
}
/**
* 用数据方法得到数字整数部分长度
* @param num
* @return
*/
public static function getUnitCount( num:Number ):int
{
return Math.ceil( Math.log( num ) / Math.LN10 );
}
}
}
class ThousandNode
{
public function ThousandNode()
{
}
public var beforeZero:Boolean;
public var afterZero:Boolean;
public var desc:String = "";
}
- 大小: 12 KB
分享到:
相关推荐
在VB(Visual Basic)编程语言中,将数字转换为英文表达是一种常见的需求,尤其是在处理财务报表、发票或者需要用户友好的数字表示时。这个算法主要涉及到数字与英文单词的映射,以及处理不同数量级(个位、十位、...
- **金额大写转换**:将阿拉伯数字(如123456.78)转换为中文大写(如壹拾贰万叁仟肆佰伍拾陆元柒角捌分)的过程,常见于财务系统中。 2. **实现步骤** - **创建工程**:首先,在VB6.0环境中创建一个新的标准EXE...
将随意给出的字符串中所有小写字母转换为大写字母。 【输入】 输入的文件为一个字符串,字符串的长度小于3000。 【输出】 全部为大写字母的字符串。 程序运行后结果示例: 【样例输入】 Founded in 1940, Chongqing ...
通过不断取余和除法,我们可以得到目标基数下的各位数字,然后根据ASCII码表将大于9的数字转换为大写字母。最后,结果字符串需要反向输出,因为我们在计算过程中是从低位到高位的。 在实际应用中,数制转换可能与...
根据给定的信息,本文将详细解释“SQL脚本函数 36进制转换为10进制”的实现原理与具体步骤。此SQL脚本函数的主要功能是将36进制数值转换为十进制数值。 ### 一、理解36进制 在计算机科学中,我们通常使用的是十...
`Text1.Text`代表文本框的文本内容,`Mid`函数用于从字符串中提取子串,`Trim`用于去除字符串两端的空白字符,`UCase`将字符串转换为大写。 9. 结束程序运行: 使用`End`语句可以直接结束程序的执行,如在`...
尤其是在处理网络协议、加密算法或是数据存储格式时,十六进制与十进制之间的转换显得尤为重要。SQL作为关系型数据库的标准查询语言,提供了丰富的功能来支持这类操作。 #### SQL脚本函数详解 该脚本定义了一个名为...
3. **大小写转换**:一旦我们有了汉字的拼音,就可以根据需求将其转换为大写或小写。VB.NET提供了`ToUpper`和`ToLower`函数,分别用于将字符串转换为大写和小写。 以下是一个简单的示例代码,展示了如何在VB.NET中...
《C#开发实战1200例》包括第I卷、第II卷共计1200个例子,...42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 实例037 汉字与区位码的转换
简介:《C#开发实战1200例》包括第I卷、第II卷共计1200个...42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 实例037 汉字与区位码的转换
简介:《C#开发实战1200例》包括第I卷、第II卷共计1200个...42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 实例037 汉字与区位码的转换
简介:《C#开发实战1200例》包括第I卷、第II卷共计1200个...42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 实例037 汉字与区位码的转换
在描述中提到的"汉字转全拼,简拼",全拼指的是每个汉字完整的拼音,如“中国”转换为“zhongguo”,而简拼则是汉字首字母组成的字符串,如“中国”转换为“zg”。简拼在某些情况下可以减少数据存储空间,提高查询...
C#开发实战1200例》包括第I卷、第II卷共计1200个例子,...42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 实例037 汉字与区位码的转换
因此,想要实现在输入时将大写字母自动转换为小写字母的功能,可以通过简单的算法实现:即在用户按下某个大写字母键时,程序检测该键的ASCII值是否位于65到90之间,如果是,则将该ASCII值加上32(即小写字母与大写...
如果遇到字符模式的转换(如大写转小写或小写转大写),还需要加上相应的转移码字(如II或as,值为27)。 为了提高程序执行效率,论文提出将数据库与数组结合使用。数据库可以用于存储大量的码字信息,而数组则用于...
但是,你可以通过内置函数如`lower()`将字符串转换为全小写,`upper()`转为全大写,或者`title()`使每个单词首字母大写。此外,`str.capitalize()`方法用于将字符串的第一个字符转换为大写,而其余字符保持小写。 ...