인민폐 대문자 변환
6267 단어 바꾸다
import java.math.BigDecimal;
/**
* @author shaoyaojie 2010-08-20
*
*/
public class ChineseMoney {
//
private static char[] CHINESE_DIGIT= { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' };
//
private static final String POS[] = new String[] { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };
/**
* ( ~ )
*
* @param chineseMoney
*
* @return
*/
public static String covertToDigital(String chineseMoney) {
//
int yuanIndex = chineseMoney == null ? -1 : chineseMoney.indexOf(' ');
if (yuanIndex < 0) {
return "";
}
if (yuanIndex > 31) {
return " !";
}
char nowChar;
BigDecimal iResult = BigDecimal.ZERO;
// ( , , , )
BigDecimal iMoneyUnit = BigDecimal.ZERO;
//
BigDecimal iDataUnit = BigDecimal.ZERO;
//
BigDecimal bdcTenThousand = new BigDecimal("10000");
char[] moneyChar = chineseMoney.toCharArray();
for (int i = moneyChar.length - 1; i > -1; i--) {
nowChar = moneyChar[i];
//
for (int k = CHINESE_DIGIT.length - 1; k >= 0; k--) {
if (nowChar == CHINESE_DIGIT[k]) {
nowChar = (char) ('0' + k);
break;
}
}
if (nowChar >= '0' && nowChar <= '9') {
iResult = iResult.add(iDataUnit.multiply(new BigDecimal(nowChar - '0')));
} else if (nowChar == ' ') {
// 1
iDataUnit = iMoneyUnit = BigDecimal.ONE;
} else if (nowChar == ' ') {
// 10000
iDataUnit = iMoneyUnit = bdcTenThousand;
} else if (nowChar == ' ') {
// 10000*10000
iDataUnit = iMoneyUnit = bdcTenThousand.multiply(bdcTenThousand);
} else if (nowChar == ' ') {
// 10000*10000*1000
iDataUnit = iMoneyUnit = bdcTenThousand.multiply(bdcTenThousand).multiply(bdcTenThousand);
} else if (nowChar == ' ') {
iDataUnit = iMoneyUnit.multiply(BigDecimal.TEN);
} else if (nowChar == ' ') {
iDataUnit = iMoneyUnit.multiply(new BigDecimal("100"));
} else if (nowChar == ' ') {
iDataUnit = iMoneyUnit.multiply(new BigDecimal("1000"));
} else if (nowChar == ' ') {
iDataUnit = new BigDecimal("0.1");
} else if (nowChar == ' ') {
iDataUnit = new BigDecimal("0.01");
}
}
return iResult.toString();
}
/**
* ( )
*
* @param money
*
* @return
*/
public String change(String money) {
BigDecimal bdMoney = BigDecimal.ZERO;
try {
// ,
bdMoney = new BigDecimal(money);
} catch (Exception ex) {
throw new IllegalArgumentException(" !");
}
//
money = bdMoney.toString();
if (money.indexOf('.') >= 0 && (money.length() - money.indexOf('.')) > 3) {
throw new IllegalArgumentException(" !");
}
// '0'~'9'
money = bdMoney.multiply(new BigDecimal("100")).abs().toString();
money = money.indexOf('.') >= 0 ? money.substring(0, money.indexOf('.')) : money;
char nowChar;
String posStr;
int posIndex;
boolean oldCharIsZero = true;
StringBuilder stb = new StringBuilder();
for (int i = money.length() - 1; i >= 0; i--) {
nowChar = money.charAt(i);
posIndex = money.length() - 1 - i;
// , " ", " ", " ", " ", " ", " ", " ", " "
posIndex = posIndex >= POS.length ? (posIndex - 3) % (POS.length - 3) + 3 : posIndex;
posStr = POS[posIndex];
if (nowChar == '0') {
if (posStr == " " || posStr == " " || posStr == " ") {
stb.append(posStr);
}
// 0, ,
if (!oldCharIsZero) {
stb.append(" ");
}
oldCharIsZero = true;
} else {
oldCharIsZero = false;
stb.append(posStr).append(CHINESE_DIGIT[nowChar - '0']);
}
}
if (bdMoney.signum() == -1) {
stb.append(" ");
}
stb.reverse();
String ret = stb.toString();
while(ret.indexOf(" ")>=0){
ret = ret.replace(" ", " ");
}
ret = ret.indexOf(" ") < 0 ? ret + " " : ret;
return ret;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Enum과 Int32, String의 상호 변환 코드평소에 우리는 Enum 형식과 int(또는string) 유형을 서로 바꾸어야 한다. 아래의 일반 프로그래밍을 이용하여 모든 상황을 처리할 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.