怎么将ireport 金额转换为大写
java代码金额小写转大写类
package cn.etcom.report;
import java.text.DecimalFormat;
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class ToChina extends JRAbstractScriptlet{
private static String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private static String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万",
"拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };
public void toChinaUpper(){
}
public String toChinaUpper(String money) throws Exception {
Double val= Double.parseDouble(money);
DecimalFormat df = new DecimalFormat("0.00");
df.format(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只显示“叁分”而不是“零元叁分”
return SignStr + PositiveIntegerToHanStr(String.valueOf(integer)) + "元" + TailStr;
}
private 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;
}
private char upperNumber(char number) {
switch (number) {
case '0':
return '零';
case '1':
return '壹';
case '2':
return '贰';
case '3':
return '叁';
case '4':
return '肆';
case '5':
return '伍';
case '6':
return '陆';
case '7':
return '柒';
case '8':
return '捌';
case '9':
return '玖';
}
return '0';
}
private char upperNumber(int index) {
int realIndex = index % 9;
if (index > 8) {//亿过后进入回归,之后是拾,佰...
realIndex = (index - 9) % 8;
realIndex = realIndex + 1;
}
switch (realIndex) {
case 0:
return '圆';
case 1:
return '拾';
case 2:
return '佰';
case 3:
return '仟';
case 4:
return '万';
case 5:
return '拾';
case 6:
return '佰';
case 7:
return '仟';
case 8:
return '亿';
}
return '0';
}
private String dispose(String result) {
result = result.replaceAll("0", "");//处理
result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零");
result = result.replaceAll("零+", "零").replace("零亿", "亿");
result = result.matches("^.*亿零万[^零]仟.*$") ? result.replace("零万", "零") : result.replace("零万", "万");
result = result.replace("亿万", "亿");
//处理小数
result = result.replace("零角", "零").replace("零分", "");
result = result.replaceAll("(^[零圆]*)(.+$)", "$2");
result = result.replaceAll("(^.*)([零]+圆)(.+$)", "$1圆零$3");
//处理整数单位
result = result.replaceAll("圆零角零分|圆零角$|圆$|^零$|圆零$|零圆$", "圆整");
result = result.replaceAll("^圆整$", "零圆整");
return result;
}
@Override
public void beforeReportInit() throws JRScriptletException {
}
@Override
public void afterReportInit() throws JRScriptletException {
}
@Override
public void beforePageInit() throws JRScriptletException {
}
@Override
public void afterPageInit() throws JRScriptletException {
}
@Override
public void beforeColumnInit() throws JRScriptletException {
}
@Override
public void afterColumnInit() throws JRScriptletException {
}
@Override
public void beforeGroupInit(String s) throws JRScriptletException {
}
@Override
public void afterGroupInit(String s) throws JRScriptletException {
}
@Override
public void beforeDetailEval() throws JRScriptletException {
}
@Override
public void afterDetailEval() throws JRScriptletException {
}
public ToChina() { }
}
2.在ireport 进行如下图的设置
3.设置需要转换的字段如图所示
4.右键设置text 如图所示
5.效果图
6.把类更新到对应 的服务器路径下即可。