「java金额比较大小」java金额大小写转换

博主:adminadmin 2023-03-23 00:15:07 497

今天给各位分享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 关于中文大写金额与阿拉伯数字 互相转换的问题(eclipse版)

package test.format;import java.text.NumberFormat;import java.util.HashMap;public class SimpleMoneyFormat {

public static final String EMPTY = "";public static final String ZERO = "零";public static final String ONE = "壹";public static final String TWO = "贰";public static final String THREE = "叁";public static final String FOUR = "肆"; public static final String FIVE = "伍";public static final String SIX = "陆";public static final String SEVEN = "柒"; public static final String EIGHT = "捌"; public static final String NINE = "玖"; public static final String TEN = "拾"; public static final String HUNDRED = "佰"; public static final String THOUSAND = "仟"; public static final String TEN_THOUSAND = "万"; public static final String HUNDRED_MILLION = "亿"; public static final String YUAN = "元"; public static final String JIAO = "角"; public static final String FEN = "分"; public static final String DOT = "."; private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap(); private HashMap chineseMoneyPattern = new HashMap(); private NumberFormat numberFormat = NumberFormat.getInstance(); private SimpleMoneyFormat() { numberFormat.setMaximumFractionDigits(4); numberFormat.setMinimumFractionDigits(2); numberFormat.setGroupingUsed(false); chineseNumberMap.put("0", ZERO); chineseNumberMap.put("1", ONE); chineseNumberMap.put("2", TWO); chineseNumberMap.put("3", THREE); chineseNumberMap.put("4", FOUR); chineseNumberMap.put("5", FIVE); chineseNumberMap.put("6", SIX); chineseNumberMap.put("7", SEVEN); chineseNumberMap.put("8", EIGHT); chineseNumberMap.put("9", NINE); chineseNumberMap.put(DOT, DOT); chineseMoneyPattern.put("1", TEN); chineseMoneyPattern.put("2", HUNDRED); chineseMoneyPattern.put("3", THOUSAND); chineseMoneyPattern.put("4", TEN_THOUSAND); chineseMoneyPattern.put("5", TEN); chineseMoneyPattern.put("6", HUNDRED); chineseMoneyPattern.put("7", THOUSAND); chineseMoneyPattern.put("8", HUNDRED_MILLION); }

public static SimpleMoneyFormat getInstance() { if (formatter == null) formatter = new SimpleMoneyFormat(); return formatter; }

public String format(String moneyStr) { checkPrecision(moneyStr); String result; result = convertToChineseNumber(moneyStr); result = addUnitsToChineseMoneyString(result); return result; } public String format(double moneyDouble) { return format(numberFormat.format(moneyDouble)); } public String format(int moneyInt) { return format(numberFormat.format(moneyInt));

} public String format(long moneyLong) { return format(numberFormat.format(moneyLong)); }

public String format(Number moneyNum) { return format(numberFormat.format(moneyNum)); }

private String convertToChineseNumber(String moneyStr) { String result; StringBuffer cMoneyStringBuffer = new StringBuffer(); for (int i = 0; i moneyStr.length(); i++) { cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1))); }

//拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT); int moneyPatternCursor = 1; for (int i = indexOfDot - 1; i 0; i--) { cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor)); moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1; } String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf(".")); cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length()); while (cMoneyStringBuffer.indexOf("零拾") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);

} while (cMoneyStringBuffer.indexOf("零佰") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);

}while (cMoneyStringBuffer.indexOf("零仟") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);

}while (cMoneyStringBuffer.indexOf("零万") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);

} while (cMoneyStringBuffer.indexOf("零亿") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION); } while (cMoneyStringBuffer.indexOf("零零") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);

} if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1) cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.length()); cMoneyStringBuffer.append(fractionPart);

result = cMoneyStringBuffer.toString(); return result; }private String addUnitsToChineseMoneyString(String moneyStr) { String result; StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr); int indexOfDot = cMoneyStringBuffer.indexOf(DOT); cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN); cMoneyStringBuffer.insert(cMoneyStringBuffer.length() - 1, JIAO); cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN); if (cMoneyStringBuffer.indexOf("零角零分") != -1)//没有零头,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整"); else if (cMoneyStringBuffer.indexOf("零分") != -1)//没有零分,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");

else { if(cMoneyStringBuffer.indexOf("零角")!=-1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2);

tmpBuffer.append("整"); } result = cMoneyStringBuffer.toString(); return result; } private void checkPrecision(String moneyStr) {

int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1; if (fractionDigits 2) throw new RuntimeException("金额" + moneyStr + "的小数位多于两位。"); //精度不能比分低 }public static void main(String args[]) { System.out.println(getInstance().format(new Double(10010001.01))); }}

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

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

就是java的正则表达式,^(0|[1-9]\\d{0,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 类的实例用于此目的则不安全。

The operator >= is undefined for the argument type(s) java.lang.String, java.lang.String 怎么解决

转账金额 和 数据库金额 现在都是字符串吧,

需要把字符串转换为数字再对比,有小数点的话

if( parseFloat(转账金额) = parseFloat(数据库金额) ){

}

else{

}

急求一Java js正则表达式验证金额,要求大小在0-10000之间保留两位小数,即0.01-9999.99之间的才满足。

(^[1-9]\d{0,3}$)|(^0\.\d{2}$)|(^[1-9]\d{0,3}\.\d{2}$)

这个吧,本人测过,应该满足你的要求

java金额比较大小的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java金额大小写转换、java金额比较大小的信息别忘了在本站进行查找喔。