package org.jpos.jposext.isomsgaction.service.support.helper; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Arrays; import java.util.Currency; import java.util.HashMap; import java.util.Map; public class AmountHelper { private static Map<String, String> map; static { map = new HashMap<String, String>(); map.put("100", "BGL"); map.put("104", "MMK"); map.put("108", "BIF"); map.put("116", "KHR"); map.put("12", "DZD"); map.put("124", "CAD"); map.put("132", "CVE"); map.put("136", "KYD"); map.put("144", "LKR"); map.put("152", "CLP"); map.put("156", "CNY"); map.put("170", "COP"); map.put("174", "KMF"); map.put("180", "ZRN"); map.put("188", "CRC"); map.put("191", "HRK"); map.put("192", "CUP"); map.put("196", "CYP"); map.put("20", "ADP"); map.put("203", "CZK"); map.put("208", "DKK"); map.put("208", "DKK"); map.put("208", "DKK"); map.put("214", "DOP"); map.put("218", "ECS"); map.put("222", "SVC"); map.put("230", "ETB"); map.put("232", "ERN"); map.put("233", "EEK"); map.put("238", "FKP"); map.put("24", "AON"); map.put("242", "FJD"); map.put("246", "FIM"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("250", "FRF"); map.put("262", "DJF"); map.put("270", "GMD"); map.put("280", "DEM"); map.put("288", "GHC"); map.put("292", "GIP"); map.put("300", "GRD"); map.put("31", "AZM"); map.put("32", "ARS"); map.put("320", "GTQ"); map.put("324", "GNF"); map.put("328", "GYD"); map.put("332", "HTG"); map.put("340", "HNL"); map.put("344", "HKD"); map.put("348", "HUF"); map.put("352", "ISK"); map.put("356", "INR"); map.put("356", "INR"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("36", "AUD"); map.put("360", "IDR"); map.put("360", "IDR"); map.put("364", "IRR"); map.put("368", "IQD"); map.put("372", "IEP"); map.put("376", "ILS"); map.put("380", "ITL"); map.put("380", "ITL"); map.put("380", "ITL"); map.put("388", "JMD"); map.put("392", "JPY"); map.put("398", "KZT"); map.put("4", "AFA"); map.put("40", "ATS"); map.put("400", "JOD"); map.put("404", "KES"); map.put("408", "KPW"); map.put("410", "KRW"); map.put("414", "KWD"); map.put("417", "KGS"); map.put("418", "LAK"); map.put("422", "LBP"); map.put("426", "LSL"); map.put("428", "LVL"); map.put("430", "LRD"); map.put("434", "LYD"); map.put("44", "BSD"); map.put("440", "LTL"); map.put("442", "LUF"); map.put("446", "MOP"); map.put("450", "MGF"); map.put("454", "MWK"); map.put("458", "MYR"); map.put("462", "MVR"); map.put("470", "MTL"); map.put("478", "MRO"); map.put("48", "BHD"); map.put("480", "MUR"); map.put("484", "MXN"); map.put("496", "MNT"); map.put("498", "MDL"); map.put("50", "BDT"); map.put("504", "MAD"); map.put("504", "MAD"); map.put("508", "MZM"); map.put("51", "AMD"); map.put("512", "OMR"); map.put("516", "NAD"); map.put("52", "BBD"); map.put("524", "NPR"); map.put("528", "NLG"); map.put("532", "ANG"); map.put("533", "AWG"); map.put("548", "VUV"); map.put("554", "NZD"); map.put("554", "NZD"); map.put("554", "NZD"); map.put("554", "NZD"); map.put("554", "NZD"); map.put("558", "NIO"); map.put("56", "BEF"); map.put("566", "NGN"); map.put("578", "NOK"); map.put("578", "NOK"); map.put("578", "NOK"); map.put("586", "PKR"); map.put("590", "PAB"); map.put("598", "PGK"); map.put("60", "BMD"); map.put("600", "PYG"); map.put("604", "PEN"); map.put("608", "PHP"); map.put("620", "PTE"); map.put("624", "GWP"); map.put("626", "TPE"); map.put("634", "QAR"); map.put("64", "BTN"); map.put("642", "ROL"); map.put("643", "RUB"); map.put("646", "RWF"); map.put("654", "SHP"); map.put("678", "STD"); map.put("682", "SAR"); map.put("690", "SCR"); map.put("694", "SLL"); map.put("702", "SGD"); map.put("703", "SKK"); map.put("704", "VND"); map.put("705", "SIT"); map.put("706", "SOS"); map.put("710", "ZAR"); map.put("710", "ZAR"); map.put("710", "ZAR"); map.put("716", "ZWD"); map.put("72", "BWP"); map.put("724", "ESP"); map.put("724", "ESP"); map.put("736", "SDD"); map.put("740", "SRG"); map.put("748", "SZL"); map.put("752", "SEK"); map.put("756", "CHF"); map.put("756", "CHF"); map.put("760", "SYP"); map.put("762", "TJR"); map.put("764", "THB"); map.put("776", "TOP"); map.put("780", "TTD"); map.put("784", "AED"); map.put("788", "TND"); map.put("792", "TRL"); map.put("795", "TMM"); map.put("8", "ALL"); map.put("800", "UGX"); map.put("807", "MKD"); map.put("810", "RUR"); map.put("818", "EGP"); map.put("826", "GBP"); map.put("834", "TZS"); map.put("84", "BZD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("840", "USD"); map.put("858", "UYU"); map.put("860", "UZS"); map.put("862", "VEB"); map.put("882", "WST"); map.put("886", "YER"); map.put("891", "YUM"); map.put("894", "ZMK"); map.put("90", "SBD"); map.put("901", "TWD"); map.put("950", "XAF"); map.put("950", "XAF"); map.put("950", "XAF"); map.put("950", "XAF"); map.put("950", "XAF"); map.put("950", "XAF"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("951", "XCD"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("952", "XOF"); map.put("953", "XPF"); map.put("953", "XPF"); map.put("953", "XPF"); map.put("955", "XBA"); map.put("956", "XBB"); map.put("957", "XBC"); map.put("958", "XBD"); map.put("959", "XAU"); map.put("96", "BND"); map.put("960", "XDR"); map.put("961", "XAG"); map.put("962", "XPT"); map.put("963", "XTS"); map.put("964", "XPD"); map.put("972", "TJS"); map.put("974", "BYR"); map.put("975", "BGN"); map.put("976", "CDF"); map.put("977", "BAM"); map.put("978", "EUR"); map.put("979", "MXV"); map.put("980", "UAH"); map.put("981", "GEL"); map.put("982", "AOR"); map.put("983", "ECV"); map.put("985", "PLN"); map.put("986", "BRL"); map.put("990", "CLF"); map.put("991", "ZAL"); map.put("997", "USN"); map.put("998", "USS"); map.put("999", "XXX"); } public static String getCurrencyCode(String paramCurrencyCode) { String currencyCode; try { Integer.parseInt(paramCurrencyCode); currencyCode = map.get(paramCurrencyCode); } catch(NumberFormatException e) { currencyCode = paramCurrencyCode; } return currencyCode; } public static String formatAmount(String paramCurrencyCode, String amount, int currencySymbolShowMode, String fmtPattern, Character decimalSep, Character groupingSep) { String currencyCode = getCurrencyCode(paramCurrencyCode); Currency curr = Currency.getInstance(currencyCode); int fractionDigits = curr.getDefaultFractionDigits(); String decFmtPattern = String.format(fmtPattern, filler(fractionDigits, '0')); double diviseur = Math.pow(10, fractionDigits); BigDecimal dividende = new BigDecimal(amount); BigDecimal quotient = dividende.divide(new BigDecimal(diviseur)); BigDecimal scaled = quotient.setScale(fractionDigits); String currencyInfo; switch (currencySymbolShowMode) { case 0: currencyInfo = ""; break; case 1: currencyInfo = curr.getCurrencyCode(); break; case 2: currencyInfo = curr.getSymbol(); break; default: currencyInfo = null; break; } curr.getSymbol(); String formattedAmount = formatDecimalAmount(scaled.doubleValue(), currencyCode, decimalSep, groupingSep, currencyInfo, decFmtPattern); return formattedAmount; } public static String formatDecimalAmount(double amount, String currencyCode, Character decimalSep, Character groupingSep, String currencySymbol, String formatPattern) { DecimalFormatSymbols dfs = new DecimalFormatSymbols(); if (null != currencySymbol) { dfs.setCurrencySymbol(currencySymbol); } if (null != decimalSep) { dfs.setDecimalSeparator(decimalSep); } if (null != groupingSep) { dfs.setGroupingSeparator(groupingSep); } DecimalFormat decf = new DecimalFormat(formatPattern, dfs); return decf.format(amount); } public static String filler(int fillingLength, char fillingChar) { char[] buf = new char[fillingLength]; Arrays.fill(buf, 0, buf.length, fillingChar); String res = new String(buf); return res; } public static void main(String[] args) { String currencyCode = "978"; String val = "000100010015"; int currencySymbolShowMode = 1; // 0=pas d'info devise, 1=code devise, // 2=symbole devise, 3=defaut String fmtPattern = "########0.%1$s###### \u00A4";//"###,###,###.%1$s######\u00A4"; Character decimalSep = ','; Character groupingSep = '\''; String formattedAmount = AmountHelper.formatAmount(currencyCode, val, currencySymbolShowMode, fmtPattern, decimalSep, groupingSep); System.out.println(formattedAmount); } }