/** * 数字をZZ.ZZ ----> Z9.999のようなフォーマットに変換する * * @param rate 数字の文字列 * @return String 変換した文字列 2003/11/07 新規作成 zhanjc */ public static String formatRate(String rate) { if (rate == null || "".equals(rate.trim())) { return ""; } if (!NumUtil.checkNumberValid(rate)) { return rate.trim(); } else { DecimalFormat rateformat = new DecimalFormat("#,##0.000"); try { double numericrate = Double.parseDouble(rate.trim()) + 0.0000000001; rate = rateformat.format(numericrate); if ("0.000".equals(rate)) { return " "; } else if (rate.substring(rate.length() - 3, rate.length()).equals("000")) { rate = rate.substring(0, rate.length() - 3) + "0"; } else { while (rate.endsWith("0")) { rate = rate.substring(0, rate.length() - 1); } } } catch (Exception ex) { debugLog.debug("formatRate failed. return the original Data"); } } if (rate != null && !"".equals(rate.trim())) { rate = rate + "%"; } return rate; }
@Test public void testGetMax() throws Exception { // invalid values assertEquals("INF", NumUtil.getMax("acb", "fsdf")); assertEquals("22", NumUtil.getMax("acb", "22")); assertEquals("-22", NumUtil.getMax("-22", "fdf3fdf22")); // two values assertEquals("22", NumUtil.getMax("11", "22")); assertEquals("11", NumUtil.getMax("11", "11")); assertEquals("12.0", NumUtil.getMax("12.0", "11")); assertEquals("13", NumUtil.getMax("12.0", "13")); // three values assertEquals("3", NumUtil.getMax("2", "1", "3")); assertEquals("3", NumUtil.getMax("3", "3", "3")); assertEquals("22", NumUtil.getMax("22", "3", "22")); }
/** * 全部ゼロ又はnullの場合 空文字列にして返す * * @param val 変換する文字列 * @return 空文字列 valは全部ゼロ又はnull又は空文字列の場合 空文字列にして返す 2003/11/07 新規作成 zhanjc */ public static String filteZero(String val) { if (val == null || "".equals(val.trim())) { return ""; } if (!NumUtil.checkIntNumberValid(val)) { return ""; } val = new Long(val.trim()).toString(); return val; }
/** * 数字を906 --> 906%のようなフォーマットに変換する * * @param number 文字列 * @return String 変換した文字列 2003/11/07 新規作成 zhanjc */ public static String formatPercentNumber(String number) { // ヌル又は空文字列の場合、""を返す if (number == null || number.trim().equals("")) { return ""; } // 数字の文字列は0又は-0の場合、0を返す if (number.trim().equals("0") || number.trim().equals("-0")) { return "0"; // 数字文字列の末に、%を追加して返す。 } else if (NumUtil.checkNumberValid(number)) { return number + "%"; } else { return number.trim(); } }
/** * 数字を9999999.99 ----> 9,999,999.99のようなフォーマットに変換する * * @param number 数字の文字列 * @param formatToLong 小数を整数に変換する * @param nullToZero 空白文字列がゼロに変換処理のフラグ:trueの場合、変換する、falseの場合、変換しない * @param zeroToNull ゼロが空白文字列に変換処理のフラグ:trueの場合、変換する、falseの場合、変換しない * @return String 変換した文字列 2003/11/07 新規作成 zhanjc * @throws Exception */ public static String formatNumber( String number, boolean formatToLong, boolean nullToZero, boolean zeroToNull) throws Exception { if (number == null || number.trim().equals("")) { if (nullToZero == true) { return "0"; } else { return ""; } } // 数字の文字列が0または-0の場合、zeroToNullによって、""或いは"0"を返す if (number.trim().equals("0") || number.trim().equals("-0")) { if (zeroToNull == true) { return ""; } else { return "0"; } } // 数字値の検査関数を呼び出す if (NumUtil.checkNumberValid(number) == false) { return number.trim(); } String sFormatNumber = ""; double dbNum; // 数字の文字列を指定した形式で数値に変換する NumberFormat defForm = new DecimalFormat(FORMAT_TEXT); try { dbNum = Double.parseDouble(number); if (formatToLong == true) { dbNum = Math.round(dbNum); } sFormatNumber = defForm.format(dbNum); // 書式化 } catch (NumberFormatException numEx) { try { // 99,9999,9 --> 99,999,999 Number numNumber = NumberFormat.getNumberInstance().parse(number); dbNum = Double.parseDouble(String.valueOf(numNumber)); if (formatToLong == true) { dbNum = Math.round(dbNum); } sFormatNumber = defForm.format(dbNum); } catch (ParseException pEx) { throw new Exception("FW096"); } } return convertToValid(sFormatNumber); }
/** * 数字を9999999.99 ----> 9,999,999.99(千円)、あるいは9999999.99 ----> 9,999,999.99(万円) * のようなフォーマットに変換し、結果の文字列を返す * * @param number 変換する文字列 0 --> "" || 0 * @param suffix 接尾辞のフラグ:1は千円、その他は万円 * @param needProcess 処理の制御フラグ: true 1.千円 9999999.99 ----> 9,999.99(千円) 2.万円 9999999.99 ----> * 999.99(万円) その他 円 9999999.99 ----> 9999999.99(円) false 1.千円 9999999.99 ----> * 9,999,999.99(千円) 2.万円 9999999.99 ----> 9,999,999.99(万円) その他 円 9999999.99 ----> * 9999999.99(円) * @param hasSuffix 接尾辞の制御フラグ:trueは有り、falseは無し * @param formatToLong 格式化の制御フラグ: true 9999999.99 ----> 10,000,000 false 9999999.99 ----> * 9,999,999.99 * @param zeroToNull ゼロ変換の制御フラグ:trueの場合、0は空文字列に変換する。 falseの場合、変換しない * @return String 変換後の文字列 2003/11/06 新規作成 zhanjc * @throws Exception */ public static String formatCurrency( String number, int suffix, boolean needProcess, boolean hasSuffix, boolean formatToLong, boolean zeroToNull) throws Exception { // ヌル又は空文字列の場合、""を返す if (number == null || number.trim().equals("")) { return ""; } if (number.trim().equals("0") || number.trim().equals("-0")) { if (zeroToNull == true) { return ""; } } // 数字値の検査関数を呼び出す if (NumUtil.checkNumberValid(number) == false) { return number.trim(); } String currencySuffix = ""; String currency = ""; int times; // suffixによって、"千円"又は"万円"を追加する if (suffix == 1) { if (hasSuffix == true) { currencySuffix = "千円"; } times = 1000; } else if (suffix == 2) { if (hasSuffix == true) { currencySuffix = "万円"; } times = 10000; } else { if (hasSuffix == true) { currencySuffix = "円"; } times = 1; } // formatToLongのように double num; NumberFormat defForm = new DecimalFormat(FORMAT_TEXT); if (needProcess == true) { try { // numberをtimesで割って、計算結果を返す num = devideTimes(number, times); // throw // NumberFormatException if (formatToLong == true) { num = Math.round(num); } currency = defForm.format(num); } catch (NumberFormatException numEx) { try { // 数字を通貨のフォーマットに変換する Number numNumber = NumberFormat.getNumberInstance().parse(number); num = devideTimes(String.valueOf(numNumber), times); if (formatToLong == true) { num = Math.round(num); } currency = defForm.format(num); } catch (ParseException pEx) { throw new Exception("FW095"); } } } else { currency = formatNumber(number, formatToLong); } return convertToValid(currency) + currencySuffix; }