java数字大写
‘壹’ java 数字转大写汉字
java 数字转大写汉字的完整例子,请参考:
package com.sitinspring;
import java.math.BigDecimal;
import java.util.Hashtable;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 将阿拉伯数字转换成汉语大写数字
* @author sitinspring
* @date 2008-03-25
*/
public class ChineseUpperCaser{
/**
* 用于存储整数部分
*/
private String integerPart;
/**
* 用于存储小数部分
*/
private String floatPart;
/**
* 用于存储0-9大写的哈希表
*/
private static final Map<String,String> ZerotoNineHt;
/**
* 用于存储十百千大写的哈希表
*/
private static final Map<Integer,String> thHuTenHt;
/**
* 用于存储万亿兆大写的哈希表
*/
private static final Map<Integer,String> wanYiZhaoHt;
static{
ZerotoNineHt=new Hashtable<String,String>();
ZerotoNineHt.put("0", "零");
ZerotoNineHt.put("1", "壹");
ZerotoNineHt.put("2", "贰");
ZerotoNineHt.put("3", "叁");
ZerotoNineHt.put("4", "肆");
ZerotoNineHt.put("5", "伍");
ZerotoNineHt.put("6", "陆");
ZerotoNineHt.put("7", "柒");
ZerotoNineHt.put("8", "捌");
ZerotoNineHt.put("9", "玖");
thHuTenHt=new Hashtable<Integer,String>();
thHuTenHt.put(0, "");
thHuTenHt.put(1, "拾");
thHuTenHt.put(2, "佰");
thHuTenHt.put(3, "仟");
wanYiZhaoHt=new Hashtable<Integer,String>();
wanYiZhaoHt.put(0, "");
wanYiZhaoHt.put(1, "万");
wanYiZhaoHt.put(2, "亿");
wanYiZhaoHt.put(3, "兆");
}
private static String getWanYiZhao(int level){
String retval="";
do{
retval+=wanYiZhaoHt.get(level % 4);
level-=3;
}while(level>3);
return retval;
}
/**
* 构造函数
* @param number
* @throws NumberFormatException
*/
public ChineseUpperCaser(float number) throws NumberFormatException{
this(String.valueOf(number));
}
/**
* 构造函数
* @param number
* @throws NumberFormatException
*/
public ChineseUpperCaser(double number) throws NumberFormatException{
this(String.valueOf(number));
}
/**
* 构造函数
* @param number
* @throws NumberFormatException
*/
public ChineseUpperCaser(int number) throws NumberFormatException{
this(String.valueOf(number));
}
/**
* 构造函数
* @param number
* @throws NumberFormatException
*/
public ChineseUpperCaser(long number) throws NumberFormatException{
this(String.valueOf(number));
}
/**
* 构造函数
* @param number
* @throws NumberFormatException
*/
public ChineseUpperCaser(String number) throws NumberFormatException{
String formalNumber=formatNumber(number);
// 辟分以给整数部分和小数部分赋值
String[] arr=formalNumber.split("[.]");
if(arr.length==2){
// 有小数点
integerPart=arr[0];
floatPart=arr[1];
}
else{
// 无小数点
integerPart=arr[0];
}
}
public String toString(){
String retval="";
if(integerPart!=null){
retval+=parseIntegerPart();
}
if(floatPart!=null){
retval+=parseFloatPart();
}
else{
retval+="整";
}
return retval;
}
/**
* 得到整数部分的汉字大写表示
* @return
*/
private String parseIntegerPart(){
String retval="";
// 将整数部分逆序,因为需要反向读取
String reverseIntegerPart="";
for(int i=integerPart.length()-1;i>-1;i--){
reverseIntegerPart+=integerPart.charAt(i);
}
// 将整数部分按四位分段
Pattern p = Pattern.compile("\\d{4}",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(reverseIntegerPart);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
while (result) {
// 每找到四位放一个逗号
m.appendReplacement(sb, m.group(0) + ",");
result = m.find();
}
m.appendTail(sb);
// 按逗号劈分,得到四位分组数据的数组
String[] arr=sb.toString().split(",");
int j;
String str;
for(int i=arr.length-1;i>=0;i--){
String temp=arr[i];
// 阿拉伯数字转大写汉字加单位(千百十)
for(j=temp.length()-1;j>=0;j--){
str=String.valueOf(temp.charAt(j));
retval+=ZerotoNineHt.get(str)+thHuTenHt.get(j);
}
retval=retval.replaceAll("(零)($)", "$2");// 零在末尾则去掉
// 加单位(兆亿万)
retval+=getWanYiZhao(i);
}
// 零替换
retval=retval.replaceAll("(零[仟佰拾])", "零");
retval=retval.replaceAll("(零{2,})", "零");
retval=retval.replaceAll("(零)($)", "$2");// 零在末尾则去掉
return retval;
}
/**
* 得到小数部分的汉字大写表示
* @return
*/
private String parseFloatPart(){
String retval="点";
for(int i=0;i<floatPart.length();i++){
String temp=String.valueOf(floatPart.charAt(i));
retval+=ZerotoNineHt.get(temp);
}
return retval;
}
/**
* 对输入的字符串进行验证,如果不能转化为数字形式则抛出数字转化异常
* ,注意这是一个运行时异常(非检查型异常),程序不用显式捕获
* @param number
* @throws NumberFormatException
*/
private String formatNumber(String number) throws NumberFormatException{
return (new BigDecimal(number)).toString();
}
public static void main(String[] args){
String[] arr={"1.543524304302432","12.432423432","123.454235","1234","12345","123456","1234567",
"12345678","123456789","1234567891","12345678912","123456789123","1234567891234","12345678912345",
"123456789123456","1234567891234567","12345678912345678","123456789123456789",
"","0","00","000","0000","01","001","0001",
"00001","10","100","1000","10000","101","1001","10001","100001","1.23","21.234","243400031.233234",
"5400035.980","543.6545"};
//String[] arr={"0","00","000","0000","01","001","0001","00001","10","100","1000","10000","101","1001","10001","100001"};
//String[] arr={"1.23","21.234","243400031.233234","5400035.980","543.6545"};
for(String str:arr){
System.out.println("阿拉伯数字等于:"+str+" 大写汉字等于:"+new ChineseUpperCaser(str));
}
}
}
‘贰’ java数字大小写转换
给你段代码参考:
public class NumToChinese {
public static String NumberToChinese(String input){
String s1="零壹贰叁肆伍陆柒捌玖";
String s4="分角整元拾佰仟万拾佰仟亿拾佰仟";
String temp="";
String result="";
if (input==null) return "输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最大只能精确到仟亿,小数点只能两位!";
temp=input.trim();
float f;
try{
f=Float.parseFloat(temp);
}catch(Exception e){
return "输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最大只能精确到仟亿,小数点只能两位!";
}
int len=0;
if(temp.indexOf(".")==-1) len=temp.length();
else len=temp.indexOf(".");
if(len>s4.length()-3) return("输入字串最大只能精确到仟亿,小数点只能两位!");
int n1=0;
String num="";
String unit="";
for(int i=0;i<temp.length();i++){
if(i>len+2){break;}
if(i==len) {continue;}
n1=Integer.parseInt(String.valueOf(temp.charAt(i)));
num=s1.substring(n1,n1+1);
n1=len-i+2;
unit=s4.substring(n1,n1+1);
result=result.concat(num).concat(unit);
}
if((len==temp.length())||(len==temp.length()-1)) result=result.concat("整");
if(len==temp.length()-2) result=result.concat("零分");
return result;
}
}
‘叁’ 用JAVA编程将任意一个整数转换成中文大写,如101转换为一百零一
import java.io.BufferedReader;
import java.io.FileReader;
public class setrs
{
public static void main(String[] args)
throws Exception
{
String fileName = "c:\\input.txt";
// 单位数组
String[] units = new String[] {"十", "百", "千", "万", "十", "百", "千", "亿"};
// 中文大写数字数组
String[] numeric = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
// 读文件
BufferedReader br = new BufferedReader(new FileReader(fileName));
String temp = null;
temp = br.readLine();
String res = "";
while (null != temp)
{
// 遍历一行中所有数字
for (int k = -1; temp.length() > 0; k++)
{
// 解析最后一位
int j = Integer.parseInt(temp.substring(temp.length() - 1, temp.length()));
String rtemp = numeric[j];
// 数值不是0且不是个位 或者是万位或者是亿位 则去取单位
if (j != 0 && k != -1 || k % 8 == 3 || k % 8 == 7)
{
rtemp += units[k % 8];
}
// 拼在之前的前面
res = rtemp + res;
// 去除最后一位
temp = temp.substring(0, temp.length() - 1);
}
// 去除后面连续的零零..
while (res.endsWith(numeric[0]))
{
res = res.substring(0, res.lastIndexOf(numeric[0]));
}
// 将零零替换成零
while (res.indexOf(numeric[0] + numeric[0]) != -1)
{
res = res.replaceAll(numeric[0] + numeric[0], numeric[0]);
}
// 将 零+某个单位 这样的窜替换成 该单位 去掉单位前面的零
for (int m = 1; m < units.length; m++)
{
res = res.replaceAll(numeric[0] + units[m], units[m]);
}
// 这里打印一下 可以改成写文件
System.out.println(res);
// 读取下一个数
res = "";
temp = br.readLine();
}
}
}
这代码是别人写的希望对你有帮助,祝你学习进步。
‘肆’ 用JAVA如何把小写数字变成大写
我以前用的人名币大小写转换,你改改应该就可以了:
public class Test6 {
static final String zhnum_0 = "零壹贰叁肆伍陆柒捌玖";
static final String zhnum = "零一二三四五六七八九";
static final String[] zhnum1 = { "", "十", "百", "千" };
static final String[] zhnum1_0 = { "", "拾", "佰", "仟" };
static final String[] zhnum2 = { "", "万", "亿", "万亿", "亿亿" };
public Test6() {
}
private static String numberToZH4(String s, boolean fan) {
StringBuffer sb = new StringBuffer();
if (s.length() != 4)
return null;
for (int i = 0; i < 4; i++) {
char c1 = s.charAt(i);
if (c1 == '0' && i > 1 && s.charAt(i - 1) == '0')
continue;
if (c1 != '0' && i > 1 && s.charAt(i - 1) == '0')
sb.append('零');
if (c1 != '0') {
if (fan) {
sb.append(zhnum_0.charAt(c1 - 48));
sb.append(zhnum1_0[4 - i - 1]);
} else {
sb.append(zhnum.charAt(c1 - 48));
sb.append(zhnum1[4 - i - 1]);
}
}
}
return new String(sb);
}
public static String numberToZH(long n, boolean fan) {
StringBuffer sb = new StringBuffer();
String strN = "000" + n;
int strN_L = strN.length() / 4;
strN = strN.substring(strN.length() - strN_L * 4);
for (int i = 0; i < strN_L; i++) {
String s1 = strN.substring(i * 4, i * 4 + 4);
String s2 = numberToZH4(s1, fan);
sb.append(s2);
if (s2.length() != 0)
sb.append(zhnum2[strN_L - i - 1]);
}
String s = new String(sb);
if (s.length() != 0 && s.startsWith("零"))
s = s.substring(1);
return s;
}
public static String numberToZH(double d, boolean fan) {
return numberToZH("" + d, fan);
}
public static String numberToZH(String str, boolean fan) {
StringBuffer sb = new StringBuffer();
int dot = str.indexOf(".");
if (dot < 0)
dot = str.length();
String zhengshu = str.substring(0, dot);
sb.append(numberToZH(Long.parseLong(zhengshu), fan));
if (dot != str.length()) {
sb.append("点");
String xiaoshu = str.substring(dot + 1);
for (int i = 0; i < xiaoshu.length(); i++) {
if (fan) {
sb.append(zhnum_0.charAt(Integer.parseInt(xiaoshu
.substring(i, i + 1))));
} else {
sb.append(zhnum.charAt(Integer.parseInt(xiaoshu.substring(
i, i + 1))));
}
}
}
String s = new String(sb);
if (s.startsWith("零"))
s = s.substring(1);
if (s.startsWith("一十"))
s = s.substring(1);
while (s.endsWith("零")) {
s = s.substring(0, s.length() - 1);
}
if (s.endsWith("点"))
s = s.substring(0, s.length() - 1);
return s;
}
public static String numberToRMB(double rmb) {
String strRMB = "" + rmb;
DecimalFormat nf = new DecimalFormat("#.#");
nf.setMaximumFractionDigits(2);
strRMB = nf.format(rmb).toString();
strRMB = numberToZH(strRMB, true);
if (strRMB.indexOf("点") >= 0) {
strRMB = strRMB + "零";
strRMB = strRMB.replaceAll("点", "圆");
String s1 = strRMB.substring(0, strRMB.indexOf("圆") + 1);
String s2 = strRMB.substring(strRMB.indexOf("圆") + 1);
strRMB = s1 + s2.charAt(0) + "角" + s2.charAt(1) + "分整";
} else {
strRMB = strRMB + "圆整";
}
return "人民币(大写):" + strRMB;
}
public static void main(String[] args) {
System.out.println(numberToRMB(342345.96));
System.out.println(numberToRMB(123));
}
}
‘伍’ java怎么将数字1转换为大写一
如下是一个将阿拉伯数字转为汉字的类,需要者可收藏到自己的util类库中以备不时之需。
public class ArabicToChineseUtils {
static String[] units = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿", "万亿" };
static char[] numArray = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
/**
* @param args
*/
public static void main(String[] args) {
int num = 245000006;
String numStr = foematInteger(num);
print("num= " + num + ", convert result: " + numStr);
double decimal = 245006.234206;
print("============================================================");
String decStr = formatDecimal(decimal);
print("decimal= " + decimal + ", decStr: " + decStr);
}
private static String foematInteger(int num) {
char[] val = String.valueOf(num).toCharArray();
int len = val.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
String m = val[i] + "";
int n = Integer.valueOf(m);
boolean isZero = n == 0;
String unit = units[(len - 1) - i];
if (isZero) {
if ('0' == val[i - 1]) {
// not need process if the last digital bits is 0
continue;
} else {
// no unit for 0
sb.append(numArray[n]);
}
} else {
sb.append(numArray[n]);
sb.append(unit);
}
}
return sb.toString();
}
private static String formatDecimal(double decimal) {
String decimals = String.valueOf(decimal);
int decIndex = decimals.indexOf(".");
int integ = Integer.valueOf(decimals.substring(0, decIndex));
int dec = Integer.valueOf(decimals.substring(decIndex + 1));
String result = foematInteger(integ) + "." + formatFractionalPart(dec);
return result;
}
private static String formatFractionalPart(int decimal) {
char[] val = String.valueOf(decimal).toCharArray();
int len = val.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
int n = Integer.valueOf(val[i] + "");
sb.append(numArray[n]);
}
return sb.toString();
}
private static void print(Object arg0) {
System.out.println(arg0);
}
}
‘陆’ JAVA练习题 金额的中文大写
//我自己写的
//把String 换成了StringBuilder 因为后者只要新建后,无论如何变化,都是同一个字符串,
//而String 是不可变的, 每改变一次,就要新建一个变量
//也可以用StringBuffer , 和StringBuilder用法一样, 不过是线程安全的
public class SmallToBig {
/**
* @param args
* 把数字换成大写的中文货币字符 123456789 换成
* 零,壹,贰,叁,肆,伍,陆,柒,捌,玖
* "元","十","佰","仟","万","十","佰","仟","亿","十","佰","仟"," ","","","" 太大的就没写了, 直接输出大写数字
*/
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("3789341.512");
System.out.print( getFloatBigCn(sb));
}
public static StringBuilder getFloatBigCn(StringBuilder sb){
String [] big={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] fUnit ={"角","分","","",""};
StringBuilder floatStr=new StringBuilder();
if(sb.indexOf(".")>-1){ //是否存在小数点
StringBuilder intPart = new StringBuilder(sb.substring(0, sb.indexOf(".")));//取得整数部分
StringBuilder flPart = new StringBuilder(sb.substring(sb.indexOf(".")+1, sb.length()));//取得小数部分
//整数部分处理
floatStr.append(getIntBigCn(intPart));//整数部分给整数方法处理
//小数点后处理
if(flPart.length()>2)
flPart = flPart.delete(2, flPart.length()); //小数点后只取到分 ,注意,此部会把2位后的数值删除掉
for (int i = 0; i <= flPart.length()-1; i++) {
int t = Integer.parseInt(flPart.substring(i, i+1));
floatStr.append(big[t]+fUnit[i]); // 数值加单位
}
}else //如果没有小数点, 直接给处理整数的方法处理
floatStr.append(getIntBigCn(sb));
return floatStr;
}
public static StringBuilder getIntBigCn(StringBuilder sb){
String[] big={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String [] iUnit ={"元","十","佰","仟","万","十","佰","仟","亿",
"十","佰","仟"," ","","","","","","","",""};//中国人太有钱。。。超出单位所能承受
StringBuilder intStr=new StringBuilder();
int cnt=0;//换单位
for(int i=sb.length();i>0 ; i--){ //倒取的值
int m = Integer.parseInt(sb.substring(i-1,i));
intStr.insert(0,big[m]+iUnit[cnt]);//从前面插入
cnt++;
}
return intStr;
}
}
‘柒’ 如何用java编一个程序将输入的阿拉伯数字转换成大写的汉字
import java.util.HashMap;
import java.util.Scanner;
public class Convert {
public static void main(String[] args) {
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
hashMap.put(0, "零");
hashMap.put(1, "壹");
hashMap.put(2, "贰");
hashMap.put(3, "叁");
hashMap.put(4, "肆");
hashMap.put(5, "伍");
hashMap.put(6, "陆");
hashMap.put(7, "柒");
hashMap.put(8, "捌");
hashMap.put(9, "玖");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
for (int i = 0; i < input.length(); i++) {
System.out.print(hashMap.get(input.charAt(i) - 48));
}
}
}
