java怎么把字符转换成数字?

Python017

java怎么把字符转换成数字?,第1张

下面这个方法可以转换,前提是你的字符内容是数字类型。比如 String str = "123" 或者 char str = '2'\x0d\x0a\x0d\x0achar a = '1'\x0d\x0aString b = String.valueOf(a)\x0d\x0aint c = Integer.parseInt(b)\x0d\x0a\x0d\x0a上面你说的 c - '0' 这一步应该就是转换格式的 ,我知道类似的在 js 中把一个变量转换成字符串 可以用 var str = str+""加两个引号就相当于格式转换了。

package test.formatimport java.text.NumberFormatimport java.util.HashMappublic 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 = nullprivate 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 resultresult = 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 resultStringBuffer cMoneyStringBuffer = new StringBuffer()for (int i = 0i <moneyStr.length()i++) { cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)))}

//拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT) int moneyPatternCursor = 1 for (int i = indexOfDot - 1i >0i--) { 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 resultStringBuffer 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)))}}