/** * */ import java.net.InetAddress; import java.net.UnknownHostException; import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.StringTokenizer; import java.util.Vector; import java.math.BigDecimal; public class FormatUtil { private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static NumberFormat numFormat = NumberFormat.getNumberInstance(); private static NumberFormat percentFormat = NumberFormat.getPercentInstance(); private FormatUtil() { } /** * 获取IP地址对应的主机域名,如果enalbelDNS为false,仅仅返回IP地址 * @param s IP地址 * @return 主机域名或IP地址 * @throws UnknownHostException */ public static String getDNSName(String s) throws UnknownHostException { InetAddress addr = InetAddress.getByName(s); String dns = addr.getHostName().trim(); return dns.toLowerCase(); } /** * 判断ipaddress是否属于私有地址 * @param ipaddress * @return */ public static boolean isPrivateIP(String ipaddress) throws ParseException { boolean flag = false; flag = isAddressInRange(ipaddress, "10.0.0.0", "10.255.255.255"); if (!flag) { flag = isAddressInRange(ipaddress, "172.16.0.0", "172.31.255.255"); } if (!flag) { flag = isAddressInRange(ipaddress, "192.168.0.0", "192.168.255.255"); } if (!flag) { flag = isAddressInRange(ipaddress, "127.0.0.0", "127.255.255.255"); } return flag; } /** * 校验是否为合法的IP地址 * @param ipAddr * @return */ public static boolean isValidIPAddr(String ipAddr) { try { getAddrArray(ipAddr); return true; } catch (ParseException e) { return false; } } public static boolean isValidNetmask(String ipAddr) { if (ipAddr == null) { return false; } StringTokenizer stringtokenizer = new StringTokenizer(ipAddr, "."); if (stringtokenizer.countTokens() != 4) { return false; } int ai[] = new int[4]; try { for (int i = 0; i < 4; i++) { ai[i] = Integer.parseInt(stringtokenizer.nextToken()); } } catch (NumberFormatException numberformatexception) { return false; } boolean evenFlag; if (ai[3] % 2 == 0) { evenFlag = true; } else { evenFlag = false; } if (!evenFlag) { // 应全是奇数 for (int j = 3; j >= 0; j--) { // 将四个整数从上到下依次解析为二进制数, if (ai[j] == 0) { return false; } while (ai[j] > 0) { if (ai[j] % 2 == 0) { return false; } ai[j] = ai[j] >> 1; } } } else { // 遇到奇数后就全是奇数 for (int j = 3; j >= 0; j--) { if (ai[j] % 2 == 0) { if (!evenFlag) { return false; } } else { evenFlag = false; } while (ai[j] > 0) { if (ai[j] % 2 == 0) { if (!evenFlag) { return false; } } else { evenFlag = false; } ai[j] = ai[j] >> 1; } } } return true; } public static boolean isBroadcastAddr(String s) throws ParseException { long l = getAddrLong(s); long l1 = getAddrLong("0.0.0.255"); long l2 = l & l1; return l2 == 255L; } /** * 检查一个IP地址是否在一些IP地址段内 * @param s IP地址 * @param vector 最小IP地址组 * @param vector1 最大IP地址组 * @return 该IP地址是否在范围内 */ public static boolean isAddressInRange(String s, Vector vector, Vector vector1) throws ParseException { if (vector == null || vector1 == null) { return true; } if (vector.size() != vector1.size()) { // TODO 抛出异常,异常要国际化 return false; } long l = getAddrLong(s); if (l == 0L) { return false; } for (int i = 0; i < vector.size(); i++) { long l1 = getAddrLong((String) vector.elementAt(i)); long l2 = getAddrLong((String) vector1.elementAt(i)); if (l <= l2 && l >= l1) { return true; } } return false; } /** * 校验两个子网是否有交叉 * @param srcIpAddr * @param srcNetmask * @param destIpAddr * @param destNetmask * @return */ public static boolean isNetInterCross(String srcIpAddr, String srcNetmask, String destIpAddr, String destNetmask) { boolean flag = false; try { if (FormatUtil.inNet(srcIpAddr, destIpAddr, destNetmask)) { flag = true; } else { String srcEndIpAddr = FormatUtil.getNetEndIP(srcIpAddr, srcNetmask); if (FormatUtil.inNet(srcEndIpAddr, destIpAddr, destNetmask)) { flag = true; } else { if (FormatUtil.inNet(destIpAddr, srcIpAddr, srcNetmask)) { flag = true; } else { String destEndIpAddr = FormatUtil.getNetEndIP(destIpAddr, destNetmask); if (FormatUtil.inNet(destEndIpAddr, srcIpAddr, srcNetmask)) { flag = true; } } } } } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 检查一个IP地址是否在一些IP地址段内 * @param s IP地址 * @param vector 最小IP地址组 * @param vector1 最大IP地址组 * @return 该IP地址是否在范围内 */ public static boolean isAddressInRange(String ip, String startIP, String endIP) throws ParseException { if (ip == null || (startIP == null && endIP == null)) { return true; } long l = getAddrLong(ip); if (l == 0L) { return false; } boolean flag = true; if (startIP != null) { long l1 = getAddrLong(startIP); if (l < l1) { flag = false; } } if (endIP != null) { long l2 = getAddrLong(endIP); if (l > l2) { flag = false; } } return flag; } /** * 检查一个IP地址是否在一个子网范围内 * @param s IP地址 * @param s1 子网地址 * @param s2 子网掩码 * @return IP地址是否在一个子网内 */ public static boolean inNet(String s, String s1, String s2) throws ParseException { if (s2.equals("255.255.255.255")) { if (s.equals(s1)) { return true; } return false; } long l = getAddrLong("255.255.255.255"); long l1 = getAddrLong(s2); long l2 = getAddrLong(s1); l2 &= l1; long l3 = l ^ l1; long l4 = getAddrLong(s); if (l4 == 0L) { return false; } return l4 < l2 + l3 && l4 >= l2; } /** * 获取给定子网掩码的子网所包括的IP地址个数 * @param s 以字符串表示网络地址 * @param s1 以字符串表示的子网掩码 * @return 子网所包括的IP地址个数,用long值表示 */ public static long getNumIPs(String s, String s1) throws ParseException { long l = getAddrLong("255.255.255.255"); long l1 = getAddrLong(s1); if (l1 == l) { return 0L; } long l2 = getAddrLong(s); long l3 = l ^ l1; if (l1 == 0L || l2 == 0L || l1 > l || l3 > l) { throw new ParseException("ErrorIPFormat" + s + " " + s1, -1); } return l3; } public static String getNetworkNetMask(String network, String netmask) throws ParseException { if (network == null || netmask == null) { throw new ParseException("ErrorIPFormat" + network + " " + netmask,-1); } long l = getAddrLong("255.255.255.255"); long l1 = getAddrLong(netmask); long l3 = l ^ l1; int num = 0; while (l3 > 0) { num++; l3 = l3 >> 1; } return network + "/" + (32 - num); } public static String[] parseNetworkNetMask(String networkNetmask) throws ParseException { if (networkNetmask == null) { throw new ParseException("ErrorIPFormat" + networkNetmask, -1); } int index = networkNetmask.indexOf("/"); if (index == -1) { return null; } String netip = networkNetmask.substring(0, index); int num = 0; try { num = Integer.parseInt(networkNetmask.substring(index + 1)); if (num > 32) { return null; } } catch (Exception ee) { return null; } long l = 1; int count = num; while (count > 1) { count--; l = (l << 1) + 1; } count = 32 - num; while (count > 0) { count--; l = l << 1; } String[] network = new String[2]; network[0] = netip; network[1] = getAddrString(l); return network; } public static String getNetMask(String startip, String endip) throws ParseException { if (startip == null || endip == null) { throw new ParseException("ErrorIPFormat" + startip + " " + endip, -1); } long l = getAddrLong(startip); long l1 = getAddrLong(endip); long l2 = ~(l1 ^ l); return getAddrString(l2); } /** * @param startip * @param netmask * @return */ public static String getNetEndIP(String startip, String p_netmask) throws ParseException { String netmask = p_netmask; if (startip != null && netmask != null) { if (startip.equals(netmask)) { netmask = "255.255.255.0"; } if (netmask.equals("0.0.0.0")) { netmask = "255.255.255.0"; } } long l = getAddrLong(startip); long l1 = getAddrLong(netmask); long l2 = ~l1 | l; return getAddrString(l2); } /** * 从一个给定IP(可能是节点地址)和子网掩码,获取子网地址 * @param s IP地址 * @param s1 子网掩码 * @return 子网地址 */ public static String getNetAddr(String s, String p_s1) throws ParseException { String s1 = p_s1; if (s != null && s1 != null) { if (s.equals(s1)) { s1 = "255.255.255.0"; } if (s1.equals("0.0.0.0")) { s1 = "255.255.255.0"; } } long l = getAddrLong(s1); long l1 = getAddrLong(s); long l2 = l1 & l; return getAddrString(l2); } /** * 获取一个IP数组内最小或最大IP地址 * @param vector IP地址数组 * @param flag 是否是最大IP地址 * @return 最大或最小IP地址 */ public static String getMinMaxAddr(Vector vector, boolean flag) throws ParseException { String s = (String) vector.firstElement(); long l = getAddrLong(s); for (int i = 1; i < vector.size(); i++) { String s1 = (String) vector.elementAt(i); long l1 = getAddrLong(s1); if (!flag) { if (l1 < l) { s = s1; l = l1; } } else if (l1 > l) { s = s1; l = l1; } } return s; } /** * 获取一个子网内的所有IP地址 * @param ip 网络地址 * @param mask 网络掩码 * @return IP地址字符数组 */ public static String[] getIPList(String ip, String mask) throws ParseException { String as[] = null; long l = getAddrLong("255.255.255.255"); long l1 = getAddrLong(mask); if (l1 == l) { as = new String[1]; as[0] = ip; return as; } long l2 = getAddrLong(ip); long l3 = l ^ l1; if (l1 == 0L || l2 == 0L || l1 > l || l3 > l) { throw new ParseException("ErrorIPFormat" + ip + " " + mask, -1); } if (l3 > 0x10000L) { throw new ParseException("ErrorIPFormat" + ip + " " + mask, -1); } if (l3 == 2L) { as = new String[1]; as[0] = getAddrString(l2 + 1L); return as; } if ((l2 + l3) - 1L > l) { throw new ParseException(I18nUtil.getInstance().getValue("ErrorIPFormat") + ip + " " + mask, -1); } as = new String[(int) l3 - 1]; for (int i = 0; i < l3 - 1; i++) { as[i] = getAddrString(l2 + 1L + i); } return as; } /** * 获取主机域名对应的IP地址 * @param s 主机域名 * @return 主机域名对应的IP地址,如果找不到相应的IP地址,返回主机域名 */ public static String getIP(String s) throws UnknownHostException { InetAddress addr = InetAddress.getByName(s); String ip = addr.getHostAddress().trim(); return ip; } /** * 基于给定的网络地址,得到特定网络的缺省子网掩码。 这个方法基于对A、B、C类网络的猜测,返回相应的子网掩码。 * @param s - 字符串表示的网络地址. * @return 缺省的网络掩码 * @throws ParseException */ public static String getDefaultNetMask(String s) throws ParseException { int ai[] = getAddrArray(s); if (ai[0] < 128) {// A类地址 return "255.0.0.0"; } if (ai[0] < 192) { // B类地址 return "255.255.0.0"; } // C、D、E类地址 return "255.255.255.0"; } /** * 将IP地址转换为long型值,这个方法检查输入的有效性 * @param s IP地址 * @return IP地址对应的long型值 * @throws ParseException */ public static long getAddrLong(String s) throws ParseException { int ai[] = getAddrArray(s); long l = 0L; for (int i = 0; i < 4; i++) { l |= (long) ai[i] << 8 * (3 - i); } return l; } /** * 将点分十进制表示的IP地址转换为长度为4的数组 * @param s IP地址 * @return 长度为4的数组,存放点号分开的值 * @throws ParseException */ public static int[] getAddrArray(String p_s) throws ParseException { String s = p_s; if (s == null) { throw new ParseException(I18nUtil.getInstance().getValue("ErrorIPFormat") + s, -1); } s = s.trim(); StringTokenizer stringtokenizer = new StringTokenizer(s, "."); if (stringtokenizer.countTokens() != 4) { throw new ParseException(I18nUtil.getInstance().getValue("ErrorIPFormat") + s, stringtokenizer .countTokens()); } int ai[] = new int[4]; for (int i = 0; i < 4; i++) { try { ai[i] = Integer.parseInt(stringtokenizer.nextToken()); } catch (NumberFormatException numberformatexception) { throw new ParseException("ErrorIPFormat" + s, i); } } for (int i = 0; i < 4; i++) { if (ai[i] < 0 || ai[i] > 255) { throw new ParseException("ErrorIPFormat" + s, i); } } return ai; } /** * 将一个long型值转换为一个IP地址串,这个方法并不检查输入的有效性。 * @param l long值数据 * @return IP地址 */ public static String getAddrString(long l) { int ai[] = new int[4]; for (int i = 0; i < 4; i++) { ai[i] = (int) (l >> 8 * (3 - i) & 255L); } return new String(ai[0] + "." + ai[1] + "." + ai[2] + "." + ai[3]); } /** * 获得一个yyyy-mm-dd hh:mm:ss格式的字符串的每个域的值 * @param dateTime yyyy-mm-dd hh:mm:ss格式的字符串 * @return 数组从0到5的六个元素分别是年,月,日,时,分,秒 */ public static String[] parseDateTime(String dateTime) { String[] result = new String[6]; StringTokenizer token = new StringTokenizer(dateTime, " "); String date = token.nextToken(); String time = token.nextToken(); StringTokenizer dateToken = new StringTokenizer(date, "-"); result[0] = dateToken.nextToken(); result[1] = dateToken.nextToken(); result[2] = dateToken.nextToken(); StringTokenizer timeToken = new StringTokenizer(time, ":"); result[3] = timeToken.nextToken(); result[4] = timeToken.nextToken(); result[5] = timeToken.nextToken(); return result; } /** * 获得一个hh:mm:ss格式的字符串的每个域的值 * @param time hh:mm:ss格式的字符串 * @return 数组从0到2的三个元素分别是时,分,秒 */ public static String[] parseTime(String time) { String[] result = new String[3]; StringTokenizer timeToken = new StringTokenizer(time, ":"); result[0] = timeToken.nextToken(); result[1] = timeToken.nextToken(); result[2] = timeToken.nextToken(); return result; } public static String to_Oracle_Date(String dateStr) { return "to_date('" + dateStr + "','yyyy-mm-dd hh24:mi:ss')"; } public static String to_Oracle_Char(String dateField) { return "to_char(" + dateField + ",'yyyy-mm-dd hh24:mi:ss')"; } /** * 将日期类型格式化成 yyyy-mm-dd hh24:mi:ss 格式 * @param date * @return */ public static String formatDate(Date date) { return simpleDateFormat.format(date); } /** * 将日期类型格式转换为yyyyMMddHHmmss的格式 * @param date * @return */ public static String formatDateToNumber(Date date) { if (date == null) { return ""; } SimpleDateFormat df = new java.text.SimpleDateFormat("yyyyMMddHHmmss"); return df.format(date); } /** * 将Web端如:2007-2-8 12:12:12 转换long型(以便入库) * @param str * @return */ public static long formatDateToLong(String str) { long flag = 0; if (str != null && !str.equals("")) { try { flag = parseDate(str).getTime(); } catch (ParseException e) { e.printStackTrace(); } } return flag; } /** * 根据数据库中long型时间,转换为时间的String到Web端显示 * @param time * @return */ public static String formatDateToString(long time) { String flag = ""; if (time > 0) { flag = formatDate(new Date(time)); } return flag; } /** * 从 yyyy-mm-dd hh24:mi:ss 格式的字符串中生成日期 * @param str * @return * @throws ParseException */ public static Date parseDate(String str) throws ParseException { return simpleDateFormat.parse(str); } public static Number parseNumber(String str) throws ParseException { return numFormat.parse(str); } /** * 格式化Number * @param value * @param minDigit 小数点后最小位数 * @param maxDigit 小数点后最大位数 * @return */ public static String formatValue(Number number, int minDigit, int maxDigit) { synchronized (numFormat) { if (numFormat.getMaximumFractionDigits() != maxDigit) { numFormat.setMaximumFractionDigits(maxDigit); } if (numFormat.getMinimumFractionDigits() != minDigit) { numFormat.setMinimumFractionDigits(minDigit); } return numFormat.format(number); } } public static Number parsePercent(String str) throws ParseException { return percentFormat.parse(str); } /** * 格式化百分数 * @param number * @param minDigit * @param maxDigit * @return */ public static String formatPercent(Number number, int minDigit, int maxDigit) { synchronized (percentFormat) { if (percentFormat.getMaximumFractionDigits() != maxDigit) { percentFormat.setMaximumFractionDigits(maxDigit); } if (percentFormat.getMinimumFractionDigits() != minDigit) { percentFormat.setMinimumFractionDigits(minDigit); } return percentFormat.format(number); } } /** * 格式化百分数 * @param number * @param minDigit * @param maxDigit * @return */ public static String formatPercent(double number, int minDigit, int maxDigit) { synchronized (percentFormat) { if (percentFormat.getMaximumFractionDigits() != maxDigit) { percentFormat.setMaximumFractionDigits(maxDigit); } if (percentFormat.getMinimumFractionDigits() != minDigit) { percentFormat.setMinimumFractionDigits(minDigit); } return percentFormat.format(number); } } /** * 格式化百分数 * @param number * @param minDigit * @param maxDigit * @return */ public static String formatPercent(float number, int minDigit, int maxDigit) { synchronized (percentFormat) { if (percentFormat.getMaximumFractionDigits() != maxDigit) { percentFormat.setMaximumFractionDigits(maxDigit); } if (percentFormat.getMinimumFractionDigits() != minDigit) { percentFormat.setMinimumFractionDigits(minDigit); } return percentFormat.format(number); } } /** * 格式化float * @param value * @param minDigit 小数点后最小位数 * @param maxDigit 小数点后最大位数 * @return */ public static String formatValue(float value, int minDigit, int maxDigit) { synchronized (numFormat) { if (numFormat.getMaximumFractionDigits() != maxDigit) { numFormat.setMaximumFractionDigits(maxDigit); } if (numFormat.getMinimumFractionDigits() != minDigit) { numFormat.setMinimumFractionDigits(minDigit); } return numFormat.format(value); } } /** * 格式化double * @param value * @param minDigit 小数点后最小位数 * @param maxDigit 小数点后最大位数 * @return */ public static String formatValue(double value, int minDigit, int maxDigit) { synchronized (numFormat) { if (numFormat.getMaximumFractionDigits() != maxDigit) { numFormat.setMaximumFractionDigits(maxDigit); } if (numFormat.getMinimumFractionDigits() != minDigit) { numFormat.setMinimumFractionDigits(minDigit); } return numFormat.format(value); } } /** * 获取流量速度的字符串 * @param value * @param minDigit * @param maxDigit * @return */ public static String getbpsString(double p_value, int minDigit, int maxDigit) { double value = p_value; if (value > 1000) { value /= 1000; if (value > 1000) { value /= 1000; if (value > 1000) { value /= 1000; return formatValue(value, minDigit, maxDigit) + "Gbps"; } return formatValue(value, minDigit, maxDigit) + "Mbps"; } return formatValue(value, minDigit, maxDigit) + "Kbps"; } return formatValue(value, 0, 0) + "bps"; } public static String getBytesPerSecString(double p_value, int minDigit, int maxDigit) { double value = p_value; if (value > 1024) { value /= 1024; if (value > 1024) { value /= 1024; if (value > 1024) { value /= 1024; return formatValue(value, minDigit, maxDigit) + "GB/S"; } return formatValue(value, minDigit, maxDigit) + "MB/S"; } return formatValue(value, minDigit, maxDigit) + "KB/S"; } return formatValue(value, 0, 0) + "B/S"; } /** * 获取速度的字符串 * @param value * @param minDigit * @param maxDigit * @return */ public static String getPsString(double p_value, int minDigit, int maxDigit, String unit) { double value = p_value; if (value >= 1024) { value /= 1024; if (value >= 1024) { value /= 1024; if (value >= 1024) { value /= 1024; return formatValue(value, minDigit, maxDigit) + "G" + unit; } return formatValue(value, minDigit, maxDigit) + "M" + unit; } return formatValue(value, minDigit, maxDigit) + "K" + unit; } return formatValue(value, 0, 0) + unit; } /** * 获取字节大小的字符串 * @param value * @param minDigit * @param maxDigit * @return */ public static String getBytesString(double p_value, int minDigit, int maxDigit) { double value = p_value; if (value > 1024) { value /= 1024; if (value > 1024) { value /= 1024; if (value > 1024) { value /= 1024; return formatValue(value, minDigit, maxDigit) + "GB"; } return formatValue(value, minDigit, maxDigit) + "MB"; } return formatValue(value, minDigit, maxDigit) + "KB"; } return formatValue(value, 0, 0) + "B"; } public static String getPeriodString(long seconds) { long hour = seconds / 3600; long minute = (seconds % 3600) / 60; long second = (seconds % 3600) % 60; String period = ""; if (hour > 0) period = period + hour + I18nUtil.getInstance().getValue("Hour"); if (minute > 0) period = period + minute + I18nUtil.getInstance().getValue("Minute"); if (second > 0) period = period + second + I18nUtil.getInstance().getValue("Second"); return period; } public static String getPeriodByMS(long ms) { if (ms == 0) { return ("0ms"); } long hour = ms / 3600000; long ret = ms % 3600000; long minute = ret / 60000; ret %= 60000; long second = ret / 1000; long mSecond = ret % 1000; String period = ""; if (hour > 0) { period += hour + "h"; } if (minute > 0) { period += minute + "m"; } if (second > 0) { period += second + "s"; } if (mSecond > 0) { period += mSecond + "ms"; } return period; } /** * 从i18n文件中读取的"\n"符不再是一个字符,所以需要替换,将读取出来的字符串转成有换行符的合法串 * @param str * @return */ public static String getNewLineString(String p_str) { String str = p_str; if (str == null) { return null; } byte[] x = { 92, 110 }; // 从i18n文件中读取的"\n"的byte值 String newline = new String(x); int idx = str.indexOf(newline); String tmp = ""; while (idx > 0) { tmp = str.substring(0, idx) + "\n" + str.substring(idx + 2); str = tmp; idx = str.indexOf(newline); } return str; } /** * 获取当前系统时间的前n个时刻的时间 例:传入1,当前系统时间为(2007-10-11 10:12:12 的毫秒数表示) 返回时间为 (2007-10-11 9:45:00 的毫秒数表示) * @param preQuarterCount * @return Date==〉 * @author wenju */ public static Date getDatePreQuarter(int preQuarterCount) { int QUARTER_MILL = 900000; long currentMill = System.currentTimeMillis(); long needReduce = currentMill % QUARTER_MILL; needReduce += QUARTER_MILL * preQuarterCount; currentMill -= needReduce; return new Date(currentMill); } /** * 获取流量字节数 * @param value * @param minDigit * @param maxDigit * @return */ public static String getbyteString(long bytes) { BigDecimal filesize = new BigDecimal(bytes); BigDecimal gegabyte = new BigDecimal( 1024 * 1024 * 1024 ); float returnValue = filesize.divide(gegabyte, 2 , BigDecimal.ROUND_UP).floatValue(); if(returnValue>1){ return (returnValue + "GB" ); } BigDecimal megabyte = new BigDecimal( 1024 * 1024 ); returnValue = filesize.divide(megabyte, 2 , BigDecimal.ROUND_UP).floatValue(); if(returnValue>1 ){ return (returnValue + "MB" ); } BigDecimal kilobyte = new BigDecimal(1024); returnValue = filesize.divide(kilobyte,2,BigDecimal.ROUND_UP).floatValue(); if(returnValue>1 ){ return (returnValue + "KB" ); } return (bytes + "B"); } /** * 格式化Double(保留位,非四舍五入) * @param number * @param maxDigit * @return */ public static String formatdouble(double ratio,int maxDigit){ String ratiostr=String.valueOf(ratio); ratiostr=ratiostr.replace('.',','); String Rate=ratiostr; String[] ratiolist=ratiostr.split(","); if(maxDigit>0){ if(ratiolist.length>1){ if(ratiolist[1].length()>=maxDigit){ Rate=ratiolist[0]+"."+ratiolist[1].substring(0,maxDigit); }else{ String str=""; for(int i=ratiolist[1].length();i<maxDigit;i++){ str+="0"; } Rate=ratiolist[0]+"."+ratiolist[1]+str; } }else{ String str=""; for(int i=0;i<maxDigit;i++){ str+="0"; } Rate=ratiolist[0]+"."+str; } }else{ Rate=ratiolist[0]; } return Rate; } }