金額換算(数字変換)
4318 ワード
/**
*
*
* @since version1.0
*/
public class MoneyToChinese {
public MoneyToChinese() {
super();
}
private final static String HanDigiStr[] = new String[] { " ", " ", " ", " ", " ", " ", " ",
" ", " ", " " };
private final static String HanDiviStr[] = new String[] { "", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " " };
/**
*
*
* @param String NumStr
* @return String
*/
public static String PositiveIntegerToHanStr(String NumStr) { // , ( ),
String RMBStr = "";
boolean lastzero = false;
boolean hasvalue = false; // 、
int len, n;
len = NumStr.length();
if (len > 15)
return " !";
for (int i = len - 1; i >= 0; i--) {
if (NumStr.charAt(len - i - 1) == ' ')
continue;
n = NumStr.charAt(len - i - 1) - '0';
if (n < 0 || n > 9)
return " !";
if (n != 0) {
if (lastzero)
RMBStr += HanDigiStr[0]; // ,
//
if (!(n == 1 && (i % 4) == 1 && i == len - 1)) //
RMBStr += HanDigiStr[n];
RMBStr += HanDiviStr[i]; // ,
hasvalue = true; //
} else {
if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) //
RMBStr += HanDiviStr[i]; // “ ” “ ”
}
if (i % 8 == 0)
hasvalue = false; //
lastzero = (n == 0) && (i % 4 != 0);
}
if (RMBStr.length() == 0)
return HanDigiStr[0]; // "0", " "
return RMBStr;
}
/**
* ( ¥)
*
* @param double val( )
* @return String( )
*/
public static String NumToRMBStr(double val) {
String SignStr = "";
String TailStr = "";
long fraction, integer;
int jiao, fen;
if (val < 0) {
val = -val;
SignStr = " ";
}
if (val > 99999999999999.999 || val < -99999999999999.999)
return " !";
//
long temp = Math.round(val * 100);
integer = temp / 100;
fraction = temp % 100;
jiao = (int) fraction / 10;
fen = (int) fraction % 10;
if (jiao == 0 && fen == 0) {
TailStr = " ";
} else {
TailStr = HanDigiStr[jiao];
if (jiao != 0)
TailStr += " ";
if (integer == 0 && jiao == 0) //
TailStr = "";
if (fen != 0)
TailStr += HanDigiStr[fen] + " ";
}
// ,0.03 “ ” “ ”
// if( !integer ) return SignStr+TailStr;
return "¥" + SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
+ " " + TailStr;
}
/**
*
*
* @param double val( )
* @return String( )
*/
public static String NumToCNMoney(double val) {
String SignStr = "";
String TailStr = "";
long fraction, integer;
int jiao, fen;
if (val < 0) {
val = -val;
SignStr = " ";
}
if (val > 99999999999999.999 || val < -99999999999999.999)
return " !";
//
long temp = Math.round(val * 100);
integer = temp / 100;
fraction = temp % 100;
jiao = (int) fraction / 10;
fen = (int) fraction % 10;
if (jiao == 0 && fen == 0) {
TailStr = " ";
} else {
TailStr = HanDigiStr[jiao];
if (jiao != 0)
TailStr += " ";
if (integer == 0 && jiao == 0) //
TailStr = "";
if (fen != 0)
TailStr += HanDigiStr[fen] + " ";
}
// ,0.03 “ ” “ ”
// if( !integer ) return SignStr+TailStr;
return SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
+ " " + TailStr;
}
public static void main(String[] args) {
String amount = MoneyToChinese.NumToCNMoney(456465145);
System.out.println(amount);
String rmb = MoneyToChinese.NumToRMBStr(8754);
System.out.println(rmb);
}
}