「java金额转大写金额」java中文大写金额

博主:adminadmin 2022-12-23 18:30:12 59

今天给各位分享java金额转大写金额的知识,其中也会对java中文大写金额进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

用java编译金额的中文大写转换。

/**

* 金额小数转换成中文大写金额

* @author Neil Han

*

*/

public class ConvertMoneyToUppercase {

private static final String UNIT[] = { "万", "千", "佰", "拾", "亿", "千", "佰",

"拾", "万", "千", "佰", "拾", "元", "角", "分" };

private static final String NUM[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆",

"柒", "捌", "玖" };

private static final double MAX_VALUE = 9999999999999.99D;

/**

* 将金额小数转换成中文大写金额

* @param money

* @return result

*/

public static String convertMoney(double money) {

if (money 0 || money MAX_VALUE)

return "参数非法!";

long money1 = Math.round(money * 100); // 四舍五入到分

if (money1 == 0)

return "零元整";

String strMoney = String.valueOf(money1);

int numIndex = 0; // numIndex用于选择金额数值

int unitIndex = UNIT.length - strMoney.length(); // unitIndex用于选择金额单位

boolean isZero = false; // 用于判断当前为是否为零

String result = "";

for (; numIndex strMoney.length(); numIndex++, unitIndex++) {

char num = strMoney.charAt(numIndex);

if (num == '0') {

isZero = true;

if (UNIT[unitIndex] == "亿" || UNIT[unitIndex] == "万"

|| UNIT[unitIndex] == "元") { // 如果当前位是亿、万、元,且数值为零

result = result + UNIT[unitIndex]; //补单位亿、万、元

isZero = false;

}

}else {

if (isZero) {

result = result + "零";

isZero = false;

}

result = result + NUM[Integer.parseInt(String.valueOf(num))] + UNIT[unitIndex];

}

}

//不是角分结尾就加"整"字

if (!result.endsWith("角")!result.endsWith("分")) {

result = result + "整";

}

//例如没有这行代码,数值"400000001101.2",输出就是"肆千亿万壹千壹佰零壹元贰角"

result = result.replaceAll("亿万", "亿");

return result;

}

public static void main(String[] args) {

double value = Double.parseDouble("40330701101.2");

System.out.println("您输入的金额(小写)为:" + value);

System.out.println("您输入的金额(大写)为:" + convertMoney(value));

}

}

java实现金额转换,阿拉伯数字的金额转换成中国传统的形式

直接通过以下接口类方法实现即可:

import java.math.BigDecimal;

/**

* 金额工具类

*

* @author zn

*

* @Date 2013-2-1

* @Email zn.share@gmail.com

*/

public class MoneyUtil {

private static final int DFT_SCALE = 2;

/** 大写数字 */

private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍",

"陆", "柒", "捌", "玖" };

/** 整数部分的单位 */

private static final String[] IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰",

"仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };

/** 小数部分的单位 */

private static final String[] DUNIT = { "角", "分", "厘" };

/**

* 得到大写金额。

*/

public static String toChinese(String str) {

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);// 小数部分数字

return getChineseInteger(integers, isMust5)

+ getChineseDecimal(decimals);

}

/**

* 整数部分和小数部分转换为数组,从高位至低位

*/

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();

}

/**

* 得到中文金额的小数部分。

*/

private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal = new StringBuffer("");

for (int i = 0; i decimals.length; i++) {

// 舍去3位小数之后的

if (i == 3)

break;

chineseDecimal.append(decimals[i] == 0 ? ""

: (NUMBERS[decimals[i]] + DUNIT[i]));

}

return chineseDecimal.toString();

}

/**

* 判断第5位数字的单位"万"是否应加。

*/

private static boolean isMust5(String integerStr) {

int length = integerStr.length();

if (length 4) {

String subInteger = "";

if (length 8) { // TODO 12-9-17

// 取得从低位数,第5到第8位的字串

subInteger = integerStr.substring(length - 8, length - 4);

} else {

subInteger = integerStr.substring(0, length - 4);

}

return Integer.parseInt(subInteger) 0;

} else {

return false;

}

}

/**

* BigDecimal 相乘,四舍五入保留0位

*

* @param a

* @param b

* @return a*b

*/

public static BigDecimal mutiply(String a, String b, int roundingMode) {

BigDecimal bd = new BigDecimal(a);

return bd.multiply(new BigDecimal(b)).setScale(DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相除,四舍五入保留两位

*

* @param a

* @param b

* @return a/b

*/

public static BigDecimal div(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

return decimal1.divide(decimal2, DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相加,四舍五入保留两位

*

* @param a

* @param b

* @return a+b

*/

public static BigDecimal sum(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

// DecimalFormat format = new DecimalFormat("#0.00");

return decimal1.add(decimal2).setScale(DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相减,四舍五入保留两位

*

* @param a

* @param b

* @return a+b

*/

public static BigDecimal sub(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

// DecimalFormat format = new DecimalFormat("#0.00");

return decimal1.subtract(decimal2).setScale(DFT_SCALE, roundingMode);

}

/**

* 100.00 为10000

*

* @param a

* @return

*/

public static BigDecimal format(String a, int roundingMode) {

return new BigDecimal(a).multiply(new BigDecimal(100)).setScale(0,

roundingMode);

}

public static void main(String[] args) {

String number = "54452";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30200";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30000.05";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30000.00";

System.out.println(number + " " + MoneyUtil.toChinese(number));

}

}

备注:最后面的main方法是具体的调用。

java简单题:一组金额数据,用人民币大写显示出来

/**

 * 程序目的:

 *   从命令行接收一个数,并将其转化为中文金额的大写方式

 * 例如 123.45 -- 壹佰贰拾叁元肆角伍分

 * @author gdb

 *

 * 实在是不符合规范,程序里面的算法没有让人明白得很清楚的注释,读上去觉得有

 * 点难度,可读性不强。而且很多程序还存在不少bug,随便一测就测出来了。

 *   所以本人还是决定重新写一下这个程序,并且尽量做到消除不必要的bug。这个程

 * 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类

 * 

 */

public class Trans2RMB {

/**

 * 测试程序的可行性

 * @param args

 */

public static void main(String[] args) {

System.out.println("\n--------将数字转换成中文金额的大写形式------------\n");

Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果转换过后是一个空串,则不输出屏幕

if(!"".equals(s)) {

System.out.println("转换成中文后为:" + s);;

}

System.out.println("\n---------------------------------------------");

}

/**

 * 从命令行接收一个数,在其中调用 checkNum() 方法对其进行

 * 验证,并返回相应的值

 * @return 如果输入合法,返回输入的这个数

 */

private String getNum() {

String s = null;

System.out.println("请输入一个数字(精确到小数点后两位):");

// 从命令行输入这个浮点数

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 关闭这个Scanner

scanner.close();

// 判断用户输入是否合法

// 若合法,返回这个值;若非法返回 "0"

if(this.checkNum(s)) {

return s;

} else {

return "";

}

}

/**

 * 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符

 * @param s String

 * @return 如果用户输入数据合法,返回 true,否则返回 false

 */

private boolean checkNum(String s) {

// 如果用户输入的数里有非数字字符,则视为非法数据,返回 false

try {

float f = Float.valueOf(s);

// 如果这个数小于零则视为非法数据,返回 false

if(f  0) {

System.out.println("非法数据,请检查!");

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println("非法数据,请检查!");

return false;

}

}

/**

 * 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法

 * 进行相应的中文金额大写形式的转换

 * 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的

 * @param s String

 * @return 转换好的中文金额大写形式的字符串

 */

private String splitNum(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 截取并转换这个数的整数部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取并转换这个数的小数部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串

String newS = part1 + part2;

return newS;

}

/**

 * 对传入的数进行四舍五入操作

 * @param s String 从命令行输入的那个数

 * @return 四舍五入后的新值

 */

private String roundString(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 将这个数转换成 double 类型,并对其进行四舍五入操作

double d = Double.parseDouble(s);

// 此操作作用在小数点后两位上

d = (d * 100 + 0.5) / 100;

// 将 d 进行格式化

s = new java.text.DecimalFormat("##0.000").format(d);

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 这个数的整数部分

String intOnly = s.substring(0, index);

// 规定数值的最大长度只能到万亿单位,否则返回 "0"

if(intOnly.length()  13) {

System.out.println("输入数据过大!(整数部分最多13位!)");

return "";

}

// 这个数的小数部分

String smallOnly = s.substring(index + 1);

// 如果小数部分大于两位,只截取小数点后两位

if(smallOnly.length()  2) {

String roundSmall = smallOnly.substring(0, 2);

// 把整数部分和新截取的小数部分重新拼凑这个字符串

s = intOnly + "." + roundSmall;

}

return s;

}

/**

 * 把传入的数转换为中文金额大写形式

 * @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分

 * @param s String 要转换的字符串

 * @return 转换好的带单位的中文金额大写形式

 */

private String numFormat(int flag, String s) {

int sLength = s.length();

// 货币大写形式

String bigLetter[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

// 货币单位

String unit[] = {"元", "拾", "佰", "仟", "万", 

// 拾万位到仟万位

"拾", "佰", "仟",

// 亿位到万亿位

"亿", "拾", "佰", "仟", "万"};

String small[] = {"分", "角"};

// 用来存放转换后的新字符串

String newS = "";

// 逐位替换为中文大写形式

for(int i = 0; i  sLength; i ++) {

if(flag == 1) {

// 转换整数部分为中文大写形式(带单位)

newS = newS + bigLetter[s.charAt(i) - 48] + unit[sLength - i - 1];

} else if(flag == 2) {

// 转换小数部分(带单位)

newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];

}

}

return newS;

}

/**

 * 把已经转换好的中文金额大写形式加以改进,清理这个字

 * 符串里面多余的零,让这个字符串变得更加可观

 * 注:传入的这个数应该是经过 splitNum() 方法进行处理,这个字

 * 符串应该已经是用中文金额大写形式表示的

 * @param s String 已经转换好的字符串

 * @return 改进后的字符串

 */

private String cleanZero(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 如果用户开始输入了很多 0 去掉字符串前面多余的'零',使其看上去更符合习惯

while(s.charAt(0) == '零') {

// 将字符串中的 "零" 和它对应的单位去掉

s = s.substring(2);

// 如果用户当初输入的时候只输入了 0,则只返回一个 "零"

if(s.length() == 0) {

return "零";

}

}

// 字符串中存在多个'零'在一起的时候只读出一个'零',并省略多余的单位

/* 由于本人对算法的研究太菜了,只能用4个正则表达式去转换了,各位大虾别介意哈... */

String regex1[] = {"零仟", "零佰", "零拾"};

String regex2[] = {"零亿", "零万", "零元"};

String regex3[] = {"亿", "万", "元"};

String regex4[] = {"零角", "零分"};

// 第一轮转换把 "零仟", 零佰","零拾"等字符串替换成一个"零"

for(int i = 0; i  3; i ++) {

s = s.replaceAll(regex1[i], "零");

}

// 第二轮转换考虑 "零亿","零万","零元"等情况

// "亿","万","元"这些单位有些情况是不能省的,需要保留下来

for(int i = 0; i  3; i ++) {

// 当第一轮转换过后有可能有很多个零叠在一起

// 要把很多个重复的零变成一个零

s = s.replaceAll("零零零", "零");

s = s.replaceAll("零零", "零");

s = s.replaceAll(regex2[i], regex3[i]);

}

// 第三轮转换把"零角","零分"字符串省略

for(int i = 0; i  2; i ++) {

s = s.replaceAll(regex4[i], "");

}

// 当"万"到"亿"之间全部是"零"的时候,忽略"亿万"单位,只保留一个"亿"

s = s.replaceAll("亿万", "亿");

return s;

}

}

JAVA 编程 输出金额的中文大写形式

public class Text {

/**

* 测试程序的可行性

* @param args

*/

public static void main(String[] args) {

System.out.println("--------将数字转换成中文金额的大写形式------------\n");

Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果转换过后是一个空串,则不输出屏幕

if(!"".equals(s)) {

System.out.println("转换成中文后为:" + s);;

}

System.out.println("\n---------------------------------------------");

}

/**

* 从命令行接收一个数,在其中调用 checkNum() 方法对其进行

* 验证,并返回相应的值

* @return 如果输入合法,返回输入的这个数

*/

private String getNum() {

String s = null;

System.out.println("请输入一个数字(精确到小数点后两位):");

// 从命令行输入这个浮点数

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 判断用户输入是否合法

// 若合法,返回这个值;若非法返回 "0"

if(this.checkNum(s)) {

return s;

} else {

return "";

}

}

/**

* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符

* @param s String

* @return 如果用户输入数据合法,返回 true,否则返回 false

*/

private boolean checkNum(String s) {

// 如果用户输入的数里有非数字字符,则视为非法数据,返回 false

try {

float f = Float.valueOf(s);

// 如果这个数小于零则视为非法数据,返回 false

if(f 0) {

System.out.println("非法数据,请检查!");

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println("非法数据,请检查!");

return false;

}

}

/**

* 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法

* 进行相应的中文金额大写形式的转换

* 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的

* @param s String

* @return 转换好的中文金额大写形式的字符串

*/

private String splitNum(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 截取并转换这个数的整数部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取并转换这个数的小数部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串

String newS = part1 + part2;

return newS;

}

/**

* 对传入的数进行四舍五入操作

* @param s String 从命令行输入的那个数

* @return 四舍五入后的新值

*/

private String roundString(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 将这个数转换成 double 类型,并对其进行四舍五入操作

double d = Double.parseDouble(s);

// 此操作作用在小数点后两位上

d = (d * 100 + 0.5) / 100;

// 将 d 进行格式化

s = new java.text.DecimalFormat("##0.000").format(d);

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 这个数的整数部分

String intOnly = s.substring(0, index);

// 规定数值的最大长度只能到万亿单位,否则返回 "0"

if(intOnly.length()13) {

System.out.println("输入数据过大!(整数部分最多13位!)");

return "";

}

// 这个数的小数部分

String smallOnly = s.substring(index + 1);

// 如果小数部分大于两位,只截取小数点后两位

if(smallOnly.length()2) {

String roundSmall = smallOnly.substring(0, 2);

// 把整数部分和新截取的小数部分重新拼凑这个字符串

s = intOnly + "." + roundSmall;

}

return s;

}

/**

* 把传入的数转换为中文金额大写形式

* @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分

* @param s String 要转换的字符串

* @return 转换好的带单位的中文金额大写形式

*/

private String numFormat(int flag, String s) {

int sLength = s.length();

// 货币大写形式

String bigLetter args) {

System.out.println("--------将数字转换成中文金额的大写形式------------\n");

Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果转换过后是一个空串,则不输出屏幕

if(!"".equals(s)) {

System.out.println("转换成中文后为:" + s);;

}

System.out.println("\n---------------------------------------------");

}

/**

* 从命令行接收一个数,在其中调用 checkNum() 方法对其进行

* 验证,并返回相应的值

* @return 如果输入合法,返回输入的这个数

*/

private String getNum() {

String s = null;

System.out.println("请输入一个数字(精确到小数点后两位):");

// 从命令行输入这个浮点数

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 判断用户输入是否合法

// 若合法,返回这个值;若非法返回 "0"

if(this.checkNum(s)) {

return s;

} else {

return "";

}

}

/**

* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符

* @param s String

* @return 如果用户输入数据合法,返回 true,否则返回 false

*/

private boolean checkNum(String s) {

// 如果用户输入的数里有非数字字符,则视为非法数据,返回 false

try {

float f = Float.valueOf(s);

// 如果这个数小于零则视为非法数据,返回 false

if(f 0) {

System.out.println("非法数据,请检查!");

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println("非法数据,请检查!");

return false;

}

}

/**

* 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法

* 进行相应的中文金额大写形式的转换

* 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的

* @param s String

* @return 转换好的中文金额大写形式的字符串

*/

private String splitNum(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 截取并转换这个数的整数部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取并转换这个数的小数部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把转换好了的整数部分和小数部分重新拼凑一个新的字符串

String newS = part1 + part2;

return newS;

}

/**

* 对传入的数进行四舍五入操作

* @param s String 从命令行输入的那个数

* @return 四舍五入后的新值

*/

private String roundString(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 将这个数转换成 double 类型,并对其进行四舍五入操作

double d = Double.parseDouble(s);

// 此操作作用在小数点后两位上

d = (d * 100 + 0.5) / 100;

// 将 d 进行格式化

s = new java.text.DecimalFormat("##0.000").format(d);

// 以小数点为界分割这个字符串

int index = s.indexOf(".");

// 这个数的整数部分

String intOnly = s.substring(0, index);

// 规定数值的最大长度只能到万亿单位,否则返回 "0"

if(intOnly.length()13) {

System.out.println("输入数据过大!(整数部分最多13位!)");

return "";

}

// 这个数的小数部分

String smallOnly = s.substring(index + 1);

// 如果小数部分大于两位,只截取小数点后两位

if(smallOnly.length()2) {

String roundSmall = smallOnly.substring(0, 2);

// 把整数部分和新截取的小数部分重新拼凑这个字符串

s = intOnly + "." + roundSmall;

}

return s;

}

/**

* 把传入的数转换为中文金额大写形式

* @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分

* @param s String 要转换的字符串

* @return 转换好的带单位的中文金额大写形式

*/

private String numFormat(int flag, String s) {

int sLength = s.length();

// 货币大写形式

String bigLetter[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

// 货币单位

String unit[] = {"元", "拾", "佰", "仟", "万",

// 拾万位到仟万位

"拾", "佰", "仟",

// 亿位到万亿位

"亿", "拾", "佰", "仟", "万"};

String small[] = {"分", "角"};

// 用来存放转换后的新字符串

String newS = "";

// 逐位替换为中文大写形式

for(int i = 0; i sLength; i ++) {

if(flag == 1) {

// 转换整数部分为中文大写形式(带单位)

newS = newS + bigLetter[s.charAt(i) - 48] + unit[sLength - i - 1];

} else if(flag == 2) {

// 转换小数部分(带单位)

newS = newS + bigLetter[s.charAt(i) - 48] + small[sLength - i - 1];

}

}

return newS;

}

/**

* 把已经转换好的中文金额大写形式加以改进,清理这个字

* 符串里面多余的零,让这个字符串变得更加可观

* 注:传入的这个数应该是经过 splitNum() 方法进行处理,这个字

* 符串应该已经是用中文金额大写形式表示的

* @param s String 已经转换好的字符串

* @return 改进后的字符串

*/

private String cleanZero(String s) {

// 如果传入的是空串则继续返回空串

if("".equals(s)) {

return "";

}

// 如果用户开始输入了很多 0 去掉字符串前面多余的‘零‘,使其看上去更符合习惯

while(s.charAt(0) == ‘零‘) {

// 将字符串中的 "零" 和它对应的单位去掉

s = s.substring(2);

// 如果用户当初输入的时候只输入了 0,则只返回一个 "零"

if(s.length() == 0) {

return "零";

}

}

// 字符串中存在多个‘零‘在一起的时候只读出一个‘零‘,并省略多余的单位

/* 由于本人对算法的研究太菜了,只能用4个正则表达式去转换了,各位大虾别介意哈... */

String regex1[] = {"零仟", "零佰", "零拾"};

String regex2[] = {"零亿", "零万", "零元"};

String regex3[] = {"亿", "万", "元"};

String regex4[] = {"零角", "零分"};

// 第一轮转换把 "零仟", 零佰","零拾"等字符串替换成一个"零"

for(int i = 0; i 3; i ++) {

s = s.replaceAll(regex1[i], "零");

}

// 第二轮转换考虑 "零亿","零万","零元"等情况

// "亿","万","元"这些单位有些情况是不能省的,需要保留下来

for(int i = 0; i 3; i ++) {

// 当第一轮转换过后有可能有很多个零叠在一起

// 要把很多个重复的零变成一个零

s = s.replaceAll("零零零", "零");

s = s.replaceAll("零零", "零");

s = s.replaceAll(regex2[i], regex3[i]);

}

// 第三轮转换把"零角","零分"字符串省略

for(int i = 0; i 2; i ++) {

s = s.replaceAll(regex4[i], "");

}

// 当"万"到"亿"之间全部是"零"的时候,忽略"亿万"单位,只保留一个"亿"

s = s.replaceAll("亿万", "亿");

return s;

}

}

如何用Java编程实现人民币大小写转换?

public String GetBigMoney(double eSender)

{

double NewMoney;

int Index, len, flag;

String StrTemp = null;

char[] p;

String Number[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

String MonetaryUnit[] = {"万","仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","角","分"} ;

NewMoney = Math.abs(eSender);

System.out.println(NewMoney);

DecimalFormat deciformat;

deciformat=(DecimalFormat)DecimalFormat.getInstance();

deciformat.applyPattern("#######");

String m = java.lang.String.valueOf(deciformat.format(NewMoney * 100));

int i;

if((i = m.indexOf('.')) != -1)

m = m.substring(0, i);

p = new char[m.length()];

//p = new char[40];

m.getChars(0, m.length(), p, 0);

//len=m.length();

if (NewMoney 100000000000.00) {

StrTemp = ""; // FloatAsComma( NewMoney, False );

return StrTemp;

}

if (NewMoney 0.01) {

StrTemp = "零";

return StrTemp;

}

if (eSender0) {

StrTemp = "负";

}

else {

StrTemp = "";

}

flag = 1;

len =p.length;

System.out.println("1111");

System.out.println(len);

for (Index=(15-len);Index15;Index++)

{

if (p[Index - 15 + len]!='0')

{

StrTemp = StrTemp + Number[Integer.parseInt(String.valueOf(p[Index-15+len]))];

StrTemp = StrTemp + MonetaryUnit[Index];

}

else

{

if (Index == 5)

{

if ((p[Index - 14 + len]!= '0') || (p[Index-13+len] != '0'))

{

StrTemp = StrTemp + MonetaryUnit[Index + 3];

flag = 0;

}

}

else

{

if ((Index == 12) ||( (Index == 8) (flag ==1)) || (Index == 4))

{

StrTemp = StrTemp + MonetaryUnit[Index];

}

if ((p[Index-15 + len] != '0') (Index != 14))

{

StrTemp = StrTemp +Number[Integer.parseInt(String.valueOf(p[Index-15+len]))];

;

}

}

}

}

if (p[m.length()-1] == '0')

{

StrTemp = StrTemp + "整";

}

return StrTemp;

}

java如何将数字转为中文大写

import org.apache.commons.lang3.StringUtils;

/**

* @Title: ConvertUpMoney

* @Description: 将数字金额转换为大写中文金额

* @date: 2019年6月18日 下午10:52:27

*/

public class ConvertUpMoney {

// 大写数字

private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

// 整数部分的单位

private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};

// 小数部分的单位

private static final String[] DUNIT = {"角","分","厘"};

/**

* 转换为大写的中文金额

* @param str 字符串类型的 金额数字

* @return

*/

public static String toChinese(String str) {

// 判断输入的金额字符串是否符合要求

if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {

return "抱歉,请输入数字!";

}

if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {

return "零元";

}

// 判断金额数字中是否存在负号"-"

boolean flag = false;

if(str.startsWith("-")){

// 标志位,标志此金额数字为负数

flag = true;

str = str.replaceAll("-", "");

}

// 去掉金额数字中的逗号","

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 = "";

}

// beyond超出计算能力,直接返回

if(integerStr.length()IUNIT.length) {

return "超出计算能力!";

}

// 整数部分数字

int[] integers = toIntArray(integerStr);

// 判断整数部分是否存在输入012的情况

if (integers.length1 integers[0] == 0) {

return "抱歉,输入数字不符合要求!";

}

// 设置万单位

boolean isWan = isWan5(integerStr);

// 小数部分数字

int[] decimals = toIntArray(decimalStr);

// 返回最终的大写金额

String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);

if(flag){

// 如果是负数,加上"负"

return "负" + result;

}else{

return result;

}

}

/**

* 将字符串转为int数组

* @param number 数字

* @return

*/

private static int[] toIntArray(String number) {

int[] array = new int[number.length()];

for(int i = 0;inumber.length();i++) {

array[i] = Integer.parseInt(number.substring(i,i+1));

}

return array;

}

/**

* 将整数部分转为大写的金额

* @param integers 整数部分数字

* @param isWan 整数部分是否已经是达到【万】

* @return

*/

public static String getChineseInteger(int[] integers,boolean isWan) {

StringBuffer chineseInteger = new StringBuffer("");

int length = integers.length;

if (length == 1 integers[0] == 0) {

return "";

}

for(int i=0; ilength; i++) {

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 isWan) {//万

key = IUNIT[4];

}else if((length - i) == 1) {//元

key = IUNIT[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();

}

/**

* 将小数部分转为大写的金额

* @param decimals 小数部分的数字

* @return

*/

private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal = new StringBuffer("");

for(int i = 0;idecimals.length;i++) {

if(i == 3) {

break;

}

chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));

}

return chineseDecimal.toString();

}

/**

* 判断当前整数部分是否已经是达到【万】

* @param integerStr 整数部分数字

* @return

*/

private static boolean isWan5(String integerStr) {

int length = integerStr.length();

if(length 4) {

String subInteger = "";

if(length 8) {

subInteger = integerStr.substring(length- 8,length -4);

}else {

subInteger = integerStr.substring(0,length - 4);

}

return Integer.parseInt(subInteger) 0;

}else {

return false;

}

}

// Test

public static void main(String[] args) {

String number = "12.56";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1234567890563886.123";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1600";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "156,0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-156,0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.12";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "01.12";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0125";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-0125";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "sdw5655";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

System.out.println(null+": "+ConvertUpMoney.toChinese(null));

}

}

关于java金额转大写金额和java中文大写金额的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。