--- /dev/null
+package com.lavans.luz2.commons;\r
+\r
+import java.math.BigDecimal;\r
+import java.math.RoundingMode;\r
+import java.text.NumberFormat;\r
+import java.util.Locale;\r
+\r
+public class NumberUtils {\r
+ /** 数値フォーマッター */\r
+ private static NumberFormat nf = NumberFormat.getInstance(Locale.JAPANESE);\r
+\r
+ /** 値段フォーマットの埋め文字 * */\r
+ public static final String HYPHEN = "-";\r
+\r
+ /**\r
+ * パラメータに従って数値を修飾する\r
+ *\r
+ * @param value\r
+ * 修飾する対象の数値\r
+ * @param scale\r
+ * 小数点以下桁数。NumberFormatに任せる場合は-1を指定する。\r
+ * NumberFormatを使用した場合、小数点桁数を指定できない。\r
+ * @param plusSign\r
+ * true:正の場合+を付加する false:何もしない\r
+ * @return 修飾後の文字列\r
+ */\r
+ public String numberFormat(BigDecimal value, int scale, boolean plusSign) {\r
+ //対象の数値が未設定の場合"-"(ハイフン)を返す\r
+ if (value == null) {\r
+ return HYPHEN;\r
+ }\r
+\r
+ String result = null;\r
+\r
+ // 数値のフォーマット\r
+ if(scale<0){\r
+ // scaleの指定がマイナス指定なら小数点桁数指定なしでフォーマットする。\r
+ result = nf.format(value);\r
+ }else{\r
+ // scaleが0以上なら指定した桁数のDecimalFormatを使う\r
+ result = formatScale(value, scale);\r
+ }\r
+\r
+ // 符号毎の色を付ける\r
+ if (plusSign && (value.signum() == 1)) {\r
+ // +\r
+ result = "+" + result;\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @param value\r
+ * @return\r
+ */\r
+ public static String numberFormat(BigDecimal value) {\r
+ //対象の数値が未設定の場合"-"(ハイフン)を返す\r
+ if (value == null) {\r
+ return HYPHEN;\r
+ }\r
+ String result = nf.format(value);\r
+ return result;\r
+ }\r
+\r
+\r
+ /**\r
+ * 小数点桁数指定でフォーマットする。\r
+ * @param decimal\r
+ * @param scale\r
+ * @return String\r
+ */\r
+ public static String formatScale(BigDecimal value, int scale) {\r
+ //対象の数値が未設定の場合"-"(ハイフン)を返す\r
+ if (value == null) {\r
+ return HYPHEN;\r
+ }\r
+\r
+ String result;\r
+ value = value.setScale(scale, RoundingMode.HALF_UP);\r
+\r
+ NumberFormat scaleFormat = NumberFormat.getInstance();\r
+ scaleFormat.setMinimumFractionDigits(scale);\r
+ scaleFormat.setMaximumFractionDigits(scale);\r
+\r
+// StringBuffer fill = new StringBuffer("");\r
+// if (scale > 0) {\r
+// fill.append(".");\r
+// for (int i = 0; i < scale; i++) {\r
+// fill.append("0");\r
+// }\r
+// }\r
+// DecimalFormat df = new DecimalFormat("#,##0" + fill.toString());\r
+ result = scaleFormat.format(value);\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * 符号付きフォーマット\r
+ * @param value\r
+ * @return\r
+ */\r
+ public static String formatSigned(int value){\r
+ NumberFormat nf = NumberFormat.getInstance();\r
+ String result = nf.format(value);\r
+ if(value>0){\r
+ result = "+"+result;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * 数値かどうか判定する。\r
+ * 桁区切りカンマ(,)を許可しない\r
+ *\r
+ * @param src\r
+ * @return\r
+ */\r
+ public static boolean isNumeric(String src) {\r
+ return isNumeric(src, false);\r
+ }\r
+\r
+ /**\r
+ * 数値かどうか判定する。\r
+ * 桁区切りカンマ(,)を許可を指定する。true: 許可 false:非許可\r
+ *\r
+ * @param src\r
+ * @return\r
+ */\r
+ public static boolean isNumeric(String src, boolean hasComma) {\r
+ if (src == null) {\r
+ return false;\r
+ }\r
+\r
+ src = src.trim();\r
+ for (int i = 0; i < src.length(); i++) {\r
+ // 数値またはピリオド以外なら\r
+ if (!Character.isDigit(src.charAt(i)) && src.charAt(i) != '.' &&\r
+ // カンマ非許可ならカンマ以外もアウト\r
+ !(hasComma && src.charAt(i) == ',')) {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ return true;\r
+ }\r
+}\r