「java小写金额转大写」java数字小写转大写

博主:adminadmin 2023-03-17 11:52:06 556

本篇文章给大家谈谈java小写金额转大写,以及java数字小写转大写对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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 数字转换为中文大写的转换

package com.heyang;

/**

* 将10亿以内的阿拉伯数字转成汉字大写形式

* @author xizhenyin

*

*/

public class CnUpperCaser {

// 整数部分

private String integerPart;

// 小数部分

private String floatPart;

// 将数字转化为汉字的数组,因为各个实例都要使用所以设为静态

private static final char[] cnNumbers={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};

// 供分级转化的数组,因为各个实例都要使用所以设为静态

private static final char[] series={'元','拾','百','仟','万','拾','百','仟','亿'};

/**

* 构造函数,通过它将阿拉伯数字形式的字符串传入

* @param original

*/

public CnUpperCaser(String original){

// 成员变量初始化

integerPart="";

floatPart="";

if(original.contains(".")){

// 如果包含小数点

int dotIndex=original.indexOf(".");

integerPart=original.substring(0,dotIndex);

floatPart=original.substring(dotIndex+1);

}

else{

// 不包含小数点

integerPart=original;

}

}

/**

* 取得大写形式的字符串

* @return

*/

public String getCnString(){

// 因为是累加所以用StringBuffer

StringBuffer sb=new StringBuffer();

// 整数部分处理

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

int number=getNumber(integerPart.charAt(i));

sb.append(cnNumbers[number]);

sb.append(series[integerPart.length()-1-i]);

}

// 小数部分处理

if(floatPart.length()0){

sb.append("点");

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

int number=getNumber(floatPart.charAt(i));

sb.append(cnNumbers[number]);

}

}

// 返回拼接好的字符串

return sb.toString();

}

/**

* 将字符形式的数字转化为整形数字

* 因为所有实例都要用到所以用静态修饰

* @param c

* @return

*/

private static int getNumber(char c){

String str=String.valueOf(c);

return Integer.parseInt(str);

}

/**

* @param args

*/

public static void main(String[] args) {

System.out.println(new CnUpperCaser("123456789.12345").getCnString());

System.out.println(new CnUpperCaser("123456789").getCnString());

System.out.println(new CnUpperCaser(".123456789").getCnString());

System.out.println(new CnUpperCaser("0.1234").getCnString());

System.out.println(new CnUpperCaser("1").getCnString());

System.out.println(new CnUpperCaser("12").getCnString());

System.out.println(new CnUpperCaser("123").getCnString());

System.out.println(new CnUpperCaser("1234").getCnString());

System.out.println(new CnUpperCaser("12345").getCnString());

System.out.println(new CnUpperCaser("123456").getCnString());

System.out.println(new CnUpperCaser("1234567").getCnString());

System.out.println(new CnUpperCaser("12345678").getCnString());

System.out.println(new CnUpperCaser("123456789").getCnString());

}

}

用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金额的中文大写方式

/**

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

* @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小写金额转大写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java数字小写转大写、java小写金额转大写的信息别忘了在本站进行查找喔。