JAVA金额大小写转化中的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA金额大小写转化中的问题相关的知识,希望对你有一定的参考价值。

private static final Pattern AMOUNT_PATTERN=Pattern.compile("^(0|[1-9]\\d0,11)\\.(\\d\\d)$");//不考虑分隔符正确性

private static final char[]RMB_NUMS="零壹贰叄肆伍陆柒捌玖".toCharArray();

private static final String[] UNITS="元","角","分","整";

private static final String[] U1="","拾","佰","仟";

private static final String[] U2="","万","亿";

下面的这段代码要怎么理解啊???
private static final Pattern AMOUNT_PATTERN=Pattern.compile("^(0|[1-9]\\d0,11)\\.(\\d\\d)$");//不考虑分隔符正确性

private static final Pattern AMOUNT_PATTERN=Pattern.compile("^(0|[1-9]\\d0,11)\\.(\\d\\d)$");//不考虑分隔符正确性
就是java的正则表达式,^(0|[1-9]\\d0,11)\\.(\\d\\d)$
这个翻译过来就是^开头是 $结尾时 |或 \d 数字0-9 两个反斜线是转义
整体就是匹配 以0或1-9开头 后面跟0到11个数字 然后跟一个点,然后以两位小数结尾的一个数
Pattern类的用法可以查API
=========================================
public final class Patternextends Objectimplements Serializable正则表达式的编译表示形式。

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

boolean b = Pattern.matches("a*b", "aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。
参考技术A ^(0|[1-9]\\d0,11)\\.(\\d\\d)$是定义了金额的数字格式

(0|[1-9]\\d0,11)是说或者是0, 或者1后边0~11个数字
\\.匹配小数点一个
(\\d\\d)匹配2个数字

整个就是说,如果是0.25或者1.00, 10.23, 12345.39, 101234567891.79样子的都符合条件
参考技术B (C5<0,"计算错误,请重新计算",SUBSTITUTE(SUBSTITUTE(TEXT(INT(FIXED(ABS(C5))),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(FIXED(C5),2),"[dbnum2]0角0分;;"&IF(ABS(C5)>1%,"整",)),"零角",IF(ABS(C5)<1,,"零")),"零分",)))

金额小写转化为大写

private static final String UNIT = "万仟佰拾亿仟佰拾万仟佰拾元角分";
private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
private static final double MAX_VALUE = 9999999999999.99D;

public  String change(double v) {
if (v < 0 || v > MAX_VALUE) {
return "参数非法!";
}
long l = Math.round(v * 100);
if (l == 0) {
return "零元整";
}
String strValue = l + "";
// i用来控制数
int i = 0;
// j用来控制单位
int j = UNIT.length() - strValue.length();
String rs = "";
boolean isZero = false;
for (; i < strValue.length(); i++, j++) {
char ch = strValue.charAt(i);
if (ch == ‘0‘) {
isZero = true;
if (UNIT.charAt(j) == ‘亿‘ || UNIT.charAt(j) == ‘万‘ || UNIT.charAt(j) == ‘元‘) {
rs = rs + UNIT.charAt(j);
isZero = false;
}
} else {
if (isZero) {
rs = rs + "零";
isZero = false;
}
rs = rs + DIGIT.charAt(ch - ‘0‘) + UNIT.charAt(j);
}
}
if (!rs.endsWith("分")) {
rs = rs + "整";
}
rs = rs.replaceAll("亿万", "亿");
return rs;
}

aae022Sum.setScale(2, RoundingMode.HALF_UP)--保留两位小数

以上是关于JAVA金额大小写转化中的问题的主要内容,如果未能解决你的问题,请参考以下文章

用java写一个将大写的MAC地址转化为小写,切把分割用的-转化为:,首先判断输入是不是为MAC地址,在转换

使用JavaScript将小写金额转化为大写金额的两种常见方法

使用JavaScript将小写金额转化为大写金额的两种常见方法

金额小写转化为大写

C语言编程:用指针编程序实现,输入一个人民币小写金额值,转化为大写金额值输出。

在WORD中怎样用VBA将人民币大写金额转换成小写金额