import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class Tool {
private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
private static final double MAX_VALUE = 9999999999999.99D;
public static String inputStream2String(InputStream in) throws IOException {
StringBuffer out = new StringBuffer();
byte[] b = new byte[1024];
int n;
while ((n = in.read(b)) != -1) {
out.append(new String(b, 0, n));
}
return out.toString();
}
public static void copyStream(InputStream in, OutputStream out) throws IOException {
byte[] chunk = new byte[1024];
int count;
while ((count = in.read(chunk)) != -1) {
out.write(chunk, 0, count);
}
}
public static String replaceContent(String value, Map<String, Object> tokens) {
String patternString = "\\$\\{(" + StringUtils.join(tokens.keySet(), "|") + ")\\}";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(value);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
Object val = tokens.get(matcher.group(1));
matcher.appendReplacement(sb, val == null ? "" : val.toString());
}
matcher.appendTail(sb);
return sb.toString();
}
public static void closeStream(Closeable stream) {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String num2Word(double v) {
if (v < 0 || v > MAX_VALUE) {
throw new BusinessException("Tool.num2Word.NumberOutOfRangeException", "金额大写(" + v + ")转换失败");
}
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;
}
public static void main(String[] args) {
System.out.println(Tool.num2Word(123567891234.9845));
}
}