irepotr 转换金额为大写实际论证

                怎么将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.把类更新到对应 的服务器路径下即可。

猜你喜欢

转载自blog.csdn.net/qq_34890925/article/details/94576328