OSDN Git Service

track
[luz/luz.git] / src / com / lavans / luz2 / commons / NumberUtils.java
diff --git a/src/com/lavans/luz2/commons/NumberUtils.java b/src/com/lavans/luz2/commons/NumberUtils.java
new file mode 100644 (file)
index 0000000..5058d6a
--- /dev/null
@@ -0,0 +1,148 @@
+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