`
azheng270
  • 浏览: 90765 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

货币 和 日期 转 中文大写

F# 
阅读更多

货币数值转中文大写

package com.th.kits.Impl;

import java.math.BigDecimal;

/**
* 阿拉伯数字转中文大写
*/
public class MoneyToUpperChinese {

/** 大写数字 */
private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

/** 整数部分的单位 */
private static final String[] IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };

/** 小数部分的单位 */
private static final String[] DUNIT = { "角", "分", "厘" };

/**
* 得到大写金额。
*/
public synchronized static String toChinese(String str) {
boolean isNegative = false;
if (str.startsWith("-")) {
isNegative = true;
str = str.substring(1);
}

Float f = Float.parseFloat(str);
if (f.intValue() == 0) {
return "零元整";
}

str = str.replaceAll(",", "");// 去掉","
String integerStr;// 整数部分数字
String decimalStr;// 小数部分数字

// 初始化:分离整数部分和小数部分
if (str.indexOf(".") > 0) {
integerStr = str.substring(0, str.indexOf("."));
decimalStr = str.substring(str.indexOf(".") + 1);
} else if (str.indexOf(".") == 0) {
integerStr = "";
decimalStr = str.substring(1);
} else {
integerStr = str;
decimalStr = "";
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
if (!integerStr.equals("")) {
integerStr = Long.toString(Long.parseLong(integerStr));
if (integerStr.equals("0")) {
integerStr = "";
}
}
// overflow超出处理能力,直接返回
if (integerStr.length() > IUNIT.length) {
System.out.println(str + ":超出处理能力");
return str;
}

int[] integers = toArray(integerStr);// 整数部分数字
boolean isMust5 = isMust5(integerStr);// 设置万单位
int[] decimals = toArray(decimalStr);// 小数部分数字

if (isNegative) {
return "负" + getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
} else {
return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
}

}

/**
* 得到大写金额 double
*/
public synchronized static String toChinese(double doubleStr) {
return toChinese(String.valueOf(doubleStr));
}

/** 得到大写金额 BigDecimal */
public synchronized static String toChinese(BigDecimal bd) {
return toChinese(bd.toString());
}

/**
* 整数部分和小数部分转换为数组,从高位至低位
*/
private static int[] toArray(String number) {
int[] array = new int[number.length()];
for (int i = 0; i < number.length(); i++) {
array[i] = Integer.parseInt(number.substring(i, i + 1));
}
return array;
}

/**
* 得到中文金额的整数部分。
*/
private static String getChineseInteger(int[] integers, boolean isMust5) {
StringBuffer chineseInteger = new StringBuffer("");
int length = integers.length;
for (int i = 0; i < length; i++) {
// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
// 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
String key = "";
if (integers[i] == 0) {
if ((length - i) == 13)// 万(亿)(必填)
key = IUNIT[4];
else if ((length - i) == 9)// 亿(必填)
key = IUNIT[8];
else if ((length - i) == 5 && isMust5)// 万(不必填)
key = IUNIT[4];
else if ((length - i) == 1)// 元(必填)
key = IUNIT[0];
// 0遇非0时补零,不包含最后一位
if ((length - i) > 1 && integers[i + 1] != 0)
key += NUMBERS[0];
}
chineseInteger.append(integers[i] == 0 ? key : (NUMBERS[integers[i]] + IUNIT[length - i - 1]));
}
return chineseInteger.toString();
}

/**
* 得到中文金额的小数部分。TODO
*/
private static String getChineseDecimal(int[] decimals) {
StringBuffer chineseDecimal = new StringBuffer("");
for (int i = 0; i < decimals.length; i++) {
// 舍去3位小数之后的
if (i == 3)
break;
if (i == 0 && decimals[i] == 0) {
chineseDecimal.append("零");
}
chineseDecimal.append(decimals[i] == 0 ? "" : (NUMBERS[decimals[i]] + DUNIT[i]));
}
System.out.println(chineseDecimal.length());
if (chineseDecimal.length() < 2) {
return "整";
} else {
return chineseDecimal.toString();
}
}

/**
* 判断第5位数字的单位"万"是否应加。
*/
private static boolean isMust5(String integerStr) {
int length = integerStr.length();
if (length > 4) {
String subInteger = "";
if (length > 8) {
// 取得从低位数,第5到第8位的字串
subInteger = integerStr.substring(length - 8, length - 4);
} else {
subInteger = integerStr.substring(0, length - 4);
}
return Integer.parseInt(subInteger) > 0;
} else {
return false;
}
}

public synchronized static String toChineseNum(BigDecimal strNum) {
String fnum = FormatCurrency.getNumNoDot(strNum);
char[] cnum = fnum.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < cnum.length; i++) {
sb.append(NUMBERS[Integer.valueOf(String.valueOf(cnum[i]))]);
}
return sb.toString();
}

public synchronized static String toChineseNum(String strNum) {
String fnum = FormatCurrency.getNumNoDot(Double.valueOf(strNum));
char[] cnum = fnum.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < cnum.length; i++) {
sb.append(NUMBERS[Integer.valueOf(String.valueOf(cnum[i]))]);
}
return sb.toString();
}

public synchronized static String toChineseNum(double strNum) {
String fnum = FormatCurrency.getNumNoDot(strNum);
char[] cnum = fnum.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < cnum.length; i++) {
sb.append(NUMBERS[Integer.valueOf(String.valueOf(cnum[i]))]);
}
return sb.toString();
}

public static void main(String[] args) {
String number = "606060.06";
System.out.println(number);
// System.out.println(toChinese(new BigDecimal(number)));
System.out.println(toChinese(number));
}

}

日期字符串转中文大写

packagecom.th.kits.Impl;

importjava.util.regex.Matcher;
importjava.util.regex.Pattern;

publicclassDateToUpperChinese{

privatestaticfinalString[]NUMBERS={"","","","","","",
"","","",""};

/**通过yyyy-MM-dd得到中文大写格式yyyyMMdd日期*/
publicstaticsynchronizedStringtoChinese(Stringstr){
StringBuffersb
=newStringBuffer();
sb.append(getSplitDateStr(str,
0)).append("").append(
getSplitDateStr(str,
1)).append("").append(
getSplitDateStr(str,
2));
returnsb.toString();
}

/**分别得到年月日的大写默认分割符"-"*/
publicstaticStringgetSplitDateStr(Stringstr,intunit){
//unit是单位0=年1=月2日
String[]DateStr=str.split("-");
if(unit>DateStr.length)
unit
=0;
StringBuffersb
=newStringBuffer();
for(inti=0;i<DateStr[unit].length();i++){

if((unit==1||unit==2)&&Integer.valueOf(DateStr[unit])>9){
sb.append(convertNum(DateStr[unit].substring(
0,1)))
.append(
"").append(
convertNum(DateStr[unit].substring(
1,2)));
break;
}
else{
sb.append(convertNum(DateStr[unit].substring(i,i
+1)));
}
}
if(unit==1||unit==2){
returnsb.toString().replaceAll("^壹","").replace("","");
}
returnsb.toString();

}

/**转换数字为大写*/
privatestaticStringconvertNum(Stringstr){
returnNUMBERS[Integer.valueOf(str)];
}

/**判断是否是零或正整数*/
publicstaticbooleanisNumeric(Stringstr){
Patternpattern
=Pattern.compile("[0-9]*");
MatcherisNum
=pattern.matcher(str);
if(!isNum.matches()){
returnfalse;
}
returntrue;
}

publicstaticvoidmain(Stringargs[]){

System.out.println(toChinese(
"2008-10-02"));

}

}

分享到:
评论

相关推荐

    Money And Date toChinese Java

    实现了日期转中文大写和货币资金转中文大写的功能,例如¥5012=伍仟零壹拾贰元

    文正票据通 v5.1.zip

    转换成多个可调的大写日期数字,一体的小写日期数字,多个可调的大写日期数字;多个可调的小写数字;感受强大的关联和转换。 数据可以导入导出: 比如可以把联系单位、用途、结算方式、货币符号,业务种类、证件...

    大小写金额转换-源码

    {-------------------------------------------------------------------- 货币数字转为为中文大写的组件 Version 1.31 by SNAKEJIAO 2003.4.13简介: 可以转化整数,浮点数,及时间日期型数据 配合别名列表可以进行...

    VBScript 语言参考中文手册CHM

    日期和时间常数 在日期和时间运算中用来定义星期几和其他常数的常数列表。 日期格式常数 用于日期和时间格式的常数列表。 Date 函数 返回当前系统日期。 DateAdd 函数 返回加上了指定的时间间隔的日期。 ...

    VBSCRIPT中文手册

    VBSCRIPT中文手册,这里的信息可以帮你很方便地浏览 Visual Basic 脚本的许多不同部分。 你可以找到在按字母排序的关键字列表中列出的 VBScript 语言的所有部分。如果你只想调阅某一部分,例如“对象”,那么语言的每...

    C#编程经验技巧宝典

    70 &lt;br&gt;0096 如何将数字转换为字符串 70 &lt;br&gt;0097 如何将字符串转换为数字 70 &lt;br&gt;0098 如何将数字转换为日期格式 71 &lt;br&gt;0099 如何将数字转换为货币格式 71 &lt;br&gt;0100 将字母全部转换大写 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例088 使用正则表达式验证中文汉字输入 103 实例089 使用正则表达式验证输入字符串 104 3.7 网络验证应用技巧 105 实例090 使用正则表达式验证E-mail格式 105 实例091 使用正则表达式验证IP地址 106 实例092 使用...

    中国银保监会银行业金融机构监管数据标准化规范(2019版).xlsx

    8. 银行自定义数据项:由于银行机构业务和信息系统的差异性,规范中一些数据数据项填报要求注明由银行自定义,此类数据数据项报送应注意使用中文字典或中文描述,避免使用英文或代码表示。对于《规范》中已经列出...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    5.4.7 NUMBERSTRING——将数值转换为大写汉字 178 5.4.8 NUMBERVALUE——以与区域设置无关的方式将文本转换为数字 179 5.4.9 T——将参数转换为文本 179 5.4.10 LOWER——将文本转换为小写 180 5.4.11 UPPER...

    配置好的傻瓜化小狼毫全拼+多种双拼+五笔86-98+笔画输入法v200312 - 17种方案

    /ey 俄语 /eyd 大写俄语 /yf 月份 /rq 日期 /yr 曜日 /sj 时间 /tg 天干 /dz 地支 /jq 节气 /dw 单位 /hb 货币 /jg 结构 /pp 偏旁 /kx 康熙部首 /bh 笔划 /bd 标点 /py 拼音 /hzq 汉字圈 /hzh 汉字弧 /sd 声调 /jm...

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 ...实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例062 货币金额大写格式 78 实例063 String类格式化当前日期 80 实例064 字符串大小写转换 82 实例065 字符与Unicode码的转换 83 4.2 辨别字符串 84 实例066 判断用户名是否正确 84 实例067 用户名排序 85 实例068...

    freemarker总结

    =可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比 较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,...

    c# 加密和解密相关代码

    开发程序时,经常需要判断输入的字符串是否为数字,如判断输入的电话号码、货币金额和邮编等。在程 序中判断是否为数字的方法有很多种,可以使用正则表达式、int.Parse 方法和double.Parse 方法等。下面的代码 通过...

Global site tag (gtag.js) - Google Analytics