Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

chuyển số tiền thành chữ

Discussion in 'Xây dựng các ứng dụng Java khác, các vấn đề khác' started by HuỳnhTrungHiếu, 8/6/13.

  1. HuỳnhTrungHiếu

    HuỳnhTrungHiếu New Member

    Em đang gặp khó khăn về phần này mong anh chị giúp dùm e.

    cảm ơn nhiều!!!
     
  2. hoithegiantinhlagi

    hoithegiantinhlagi Active Member

    Tức là sao? vd như nhập String s= "10000"; muốn chuyển thành số để tính hay sao? nếu vậy dùng toString() là xong.
     
  3. SITUVN

    SITUVN Well-Known Member

    Vậy là bạn viết bằng Ngôn ngữ khác à? Ngôn ngữ gì nghe lạ quá!:eek:
    Không đưa tên ngôn ngữ bạn đang viết.
     
  4. Tran The Hoan

    Tran The Hoan New Member

    Vấn đề này chăng
    Code:
    public static void main(String[] args) {
            float f = 10000000;
            Locale locale = new Locale("vi");
            NumberFormat format =  NumberFormat.getCurrencyInstance(locale);
            System.out.println(format.format(f));
        }
     
  5. HuỳnhTrungHiếu

    HuỳnhTrungHiếu New Member

    là thế này : nhập chuổi String = "123" => in ra "một trăm hai mươi ba đồng"
     
  6. hoithegiantinhlagi

    hoithegiantinhlagi Active Member

    Mình mới nghĩ ra cách làm như bạn nói nhưng chưa code thử, nhưng vấn đề là chính mình cũng thấy cách này rất dở.
    Thuật toán như sau:
    1/ Khi nhập chuỗi vào thì chuyển nó ra số trước parseInt(). Rồi tách các số đó ra riêng, vd: 123 -> 1, 2, 3.
    2/ Sau đó mình đếm xem có bao nhiêu chữ số, dựa vào số lượng chữ số mình sẽ phân ra các trường hợp vd như trường hợp có 3 số 1, 2, 3 thì số đầu tiên là hàng trăm, số thứ 2 là hàng chục, cuối cùng luôn là hàng đơn vị(mặc định đặt nó là đồng).
    3/ Mình cứ làm như vậy cho đến đơn vị tỷ, sau đó nếu gặp số vài nghìn tỷ đồng thì gọi lại các bước đầu.
    Mình hơi dở việc trình bày ko biết nói vậy bạn hiểu ko, chứ thật ra mình viết mà mình đọc xong cũng...ko hiểu gì hết...=))
     
  7. vtcNew

    vtcNew Active Member

    kimcy1992 likes this.
  8. kimcy1992

    kimcy1992 Active Member

    Bạn sang congdongcviet tìm xem, bên đó bài này nói nhiều rồi, nói chung là nó chả đơn giản tí nào, trước mình có làm nhưng thất bại hết :D
     
  9. HuỳnhTrungHiếu

    HuỳnhTrungHiếu New Member

    mình cần code để tham khảo thêm, vấn đề là gán biến số và biến đơn vị thôi :confused:
     
  10. HuỳnhTrungHiếu

    HuỳnhTrungHiếu New Member

    bên congdongviet toàn viết hàm con thôi, mình hok rành về C++ nên cũng hok hiểu cho lắm :(
     
  11. tranhuyvc

    tranhuyvc Administrator Staff Member

    mình nghi vấn đề này k có gì khó, idea của bạn hoithegiantinhlagi cũng đúng đó, mình xin bổ sung thêm
    Vì hiện tại chưa có thằng nào hỗ trợ kiểu này. bạn chỉ cần if else thôi, sử dụng các vấn đề sau
    1. Chuyển thành String cho de xử lý
    2. Tạo 1 array để con convert số qua chử ví dụ 1 -> một , 2-> hai
    3. Đếm String số cần chuyển có bao nhiêu chữ số và chạy vòng lập duyệt wa các số, bạn if else, hoăc switch case phần số 2 mình nói và kiểm tra số hiện đang ở vòng lập là hàng trăm, nghìn hay đơn vị để thêm tiền và hậu tố.
    Chạy hết vòng lập là sẽ chuyển được, chỉ có có chút java cơ bản là làm được
     
    Joe likes this.
  12. Joe

    Joe Thành viên VIP

    If I understand him and you correctly then the point 2) is the easiest ways to convert a number to a string. OR: (more sophisticated;)) Using a Hashtable to get/put the corresponding key/value: 1-ONE, 2-TWO, etc.
    However point 2) gives you the chance to say: A dot or . = thousand, a comma , is a fraction....
    char[] num = {'1', '2', '3'.....'.', ','};
    String[] snum = {"mot", "hai", "ba",...,"ngan", "phan?"};
    the corresponding index is the relationship between 2 arrays.
     
    tranhuyvc and JackV like this.
  13. JackV

    JackV Administrator Staff Member

    Nice? Joe, your girlfriend is a teacher, Vietnamese with language mark (một, hai, ba, ..., ngàn, ) please ;)
    Theo problem, 1513 not one five one three, is must be one thousand five hundred and thirteen (một ngàn năm trăm mười ba) not (một ngàn năm trăm một ba)
    Theo problem, 1523 not one five two three, is must be one thousand five hundred and twenty-three (một ngàn năm trăm hai mươi ba) not (một ngàn năm trăm hai ba)

    How it is coded in England's currency
     
  14. Joe

    Joe Thành viên VIP

    Oh, Erica Tran is a wonderful teacher. She tells me where's the difference between North, Central (Hue, Quangngai) and South (Cantho). I don't know if she tells me the truth or just so, that the Hanoier speaking is the high Vietnamese.
    Back to your Question:
    1513: Official: One thousand five (and) hundred thirteen. In the military: One Five One Three.
    1523: One thousand five hundred twenty three (dollar or pound).
    In German:
    Eintausandfuenfhundertdreizehn (German is very strange: Numbers are always concatenated)
    Eintausandfuenfhundertdreiundzwanzig (1523 Euros or Dollar)
    En français:
    Un mille cinq cents treize (euros où dollar)
    Un mille cinq cents vingt-trois. (1523)
    OKAY;) ?
    PS: I don't know how to use the "marks" (correct: accents) so I dare not to write in Vietnamese.
     
    JackV likes this.
  15. npn

    npn New Member

    Code:
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.HashMap;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import org.apache.commons.lang.math.NumberUtils;
    
    /**
     *
     * @author Phong Nha
     */
    public class ChuyenTienRaChu {
    
        public static HashMap<String, String> hm_tien = new HashMap<String, String>() {
            {
                put("0", "không");
                put("1", "một");
                put("2", "hai");
                put("3", "ba");
                put("4", "bốn");
                put("5", "năm");
                put("6", "sáu");
                put("7", "bảy");
                put("8", "tám");
                put("9", "chín");
            }
        };
        public static HashMap<String, String> hm_hanh = new HashMap<String, String>() {
            {
                put("1", "đồng");
                put("2", "mươi");
                put("3", "trăm");
                put("4", "nghìn");
                put("5", "mươi");
                put("6", "trăm");
                put("7", "triệu");
                put("8", "mươi");
                put("9", "trăm");
                put("10", "tỷ");
                put("11", "mươi");
                put("12", "trăm");
                put("13", "nghìn");
                put("14", "mươi");
                put("15", "trăm");
    
            }
        };
    
        public static void main(String[] args) throws ParseException {
            String tien = "411304";
            String kq = ChuyenSangChu(tien);
            System.out.println(currencyFormat(tien));
            System.out.println(kq);
    
        }
    
        public static String ChuyenSangChu(String x) {
            String kq = "";
            x = x.replace(".", "");
            String arr_temp[] = x.split(",");
            if (!NumberUtils.isNumber(arr_temp[0])) {
                return "";
            }
            String m = arr_temp[0];
            int dem = m.length();
            String dau = "";
            int flag10 = 1;
            while (!m.equals("")) {
                if (m.length() <= 3 && m.length() > 1 && Long.parseLong(m) == 0) {
    
                } else {
                    dau = m.substring(0, 1);
                    if (dem % 3 == 1 && m.startsWith("1") && flag10 == 0) {
                        kq += "mốt ";
                        flag10 = 0;
                    } else if (dem % 3 == 2 && m.startsWith("1")) {
                        kq += "mười ";
                        flag10 = 1;
                    } else if (dem % 3 == 2 && m.startsWith("0") && m.length() >= 2 && !m.substring(1, 2).equals("0")) {
                        //System.out.println("a  "+m.substring(1, 2));
                        kq += "lẻ ";
                        flag10 = 1;
                    } else {
                        if (!m.startsWith("0")) {
                            kq += hm_tien.get(dau) + " ";
                            flag10 = 0;
                        }
                    }
                    if (dem%3!=1 &&m.startsWith("0") && m.length()>1) {
                    } else {
                        if (dem % 3 == 2 && (m.startsWith("1") || m.startsWith("0"))) {//mười
                        } else {
                            kq += hm_hanh.get(dem + "") + " ";
                        }
                    }
                }
                m = m.substring(1);
                dem = m.length();
            }
            kq=kq.substring(0, kq.length() - 1);
            return kq;
        }
    
        public static String currencyFormat(String curr) {
            try {
                double vaelue = Double.parseDouble(curr);
                String pattern = "###,###";
                DecimalFormat myFormatter = new DecimalFormat(pattern);
                String output = myFormatter.format(vaelue);
                return output;
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
            return "";
        }
    }
     
    Last edited: 23/11/17
    devtttq likes this.
  16. quockhanhqb011

    quockhanhqb011 New Member

    HTML:
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    
    public class ReadNumber {
        public static void main(String[] args) throws ParseException {
            double tongtien = 1343432535;
            System.out.print(numberToString(tongtien));
           
        }
        public static String formatNumberForRead(double number) {
            NumberFormat nf = NumberFormat.getInstance();
            String temp = nf.format(number);
            String strReturn = "";
            int slen = temp.length();
            for (int i = 0; i < slen; i++) {
                if (String.valueOf(temp.charAt(i)).equals("."))
                    break;
                else if (Character.isDigit(temp.charAt(i))) {
                    strReturn += String.valueOf(temp.charAt(i));
                }
            }
            return strReturn;
    
        }
        public static String numberToString(double number) {
            String sNumber = formatNumberForRead(number);
            // Tao mot bien tra ve
            String sReturn = "";
            // Tim chieu dai cua chuoi
            int iLen = sNumber.length();
            // Lat nguoc chuoi nay lai
            String sNumber1 = "";
            for (int i = iLen - 1; i >= 0; i--) {
                sNumber1 += sNumber.charAt(i);
            }
            // Tao mot vong lap de doc so
            // Tao mot bien nho vi tri cua sNumber
            int iRe = 0;
            do {
                // Tao mot bien cat tam
                String sCut = "";
                if (iLen > 3) {
                    sCut = sNumber1.substring((iRe * 3), (iRe * 3) + 3);
                    sReturn = Read(sCut, iRe) + sReturn;
                    iRe++;
                    iLen -= 3;
                } else {
                    sCut = sNumber1.substring((iRe * 3), (iRe * 3) + iLen);
                    sReturn = Read(sCut, iRe) + sReturn;
                    break;
                }
            } while (true);
            if(sReturn.length() > 1){
                sReturn = sReturn.substring(0,1).toUpperCase() + sReturn.substring(1);
            }
            sReturn = sReturn + "đồng";
            return sReturn;
        }
    
        // Khoi tao ham Read
        public static String Read(String sNumber, int iPo) {
            // Tao mot bien tra ve
            String sReturn = "";
            // Tao mot bien so
            String sPo[] = { "", "ngàn" + " ",
                    "triệu" + " ", "tỷ" + " " };
            String sSo[] = { "không" + " ", "một" + " ",
                    "hai" + " ", "ba" + " ",
                    "bốn" + " ", "năm" + " ",
                    "sáu" + " ", "bảy" + " ",
                    "tám" + " ", "chín" + " " };
            String sDonvi[] = { "", "mươi" + " ",
                    "trăm" + " " };
            // Tim chieu dai cua chuoi
            int iLen = sNumber.length();
            // Tao mot bien nho vi tri doc
            int iRe = 0;
            // Tao mot vong lap de doc so
            for (int i = 0; i < iLen; i++) {
                String sTemp = "" + sNumber.charAt(i);
                int iTemp = Integer.parseInt(sTemp);
                // Tao mot bien ket qua
                String sRead = "";
                // Kiem tra xem so nhan vao co = 0 hay ko
                if (iTemp == 0) {
                    switch (iRe) {
                    case 0:
                        break;// Khong lam gi ca
                    case 1: {
                        if (Integer.parseInt("" + sNumber.charAt(0)) != 0) {
                            sRead = "lẻ" + " ";
                        }
                        break;
                    }
                    case 2: {
                        if (Integer.parseInt("" + sNumber.charAt(0)) != 0
                                && Integer.parseInt("" + sNumber.charAt(1)) != 0) {
                            sRead = "không trăm" + " ";
                        }
                        break;
                    }
                    }
                } else if (iTemp == 1) {
                    switch (iRe) {
                    case 1:
                        sRead = "mười" + " ";
                        break;
                    default:
                        sRead = "một" + " " + sDonvi[iRe];
                        break;
                    }
                } else if (iTemp == 5) {
                    switch (iRe) {
                    case 0: {
                        if(sNumber.length() <= 1){
                            sRead = "năm" + " ";
                        }
                        else if (Integer.parseInt("" + sNumber.charAt(1)) != 0) {
                            sRead = "lăm" + " ";
                        } else
                            sRead = "năm" + " ";
                        break;
                    }
                    default:
                        sRead = sSo[iTemp] + sDonvi[iRe];
                    }
                } else {
                    sRead = sSo[iTemp] + sDonvi[iRe];
                }
    
                sReturn = sRead + sReturn;
                iRe++;
            }
            if (sReturn.length() > 0) {
                sReturn += sPo[iPo];
            }
    
            return sReturn;
        }
    
        public static String getRomanNumerals(int Int) {
            LinkedHashMap<String, Integer> roman_numerals = new LinkedHashMap<String, Integer>();
            roman_numerals.put("M", 1000);
            roman_numerals.put("CM", 900);
            roman_numerals.put("D", 500);
            roman_numerals.put("CD", 400);
            roman_numerals.put("C", 100);
            roman_numerals.put("XC", 90);
            roman_numerals.put("L", 50);
            roman_numerals.put("XL", 40);
            roman_numerals.put("X", 10);
            roman_numerals.put("IX", 9);
            roman_numerals.put("V", 5);
            roman_numerals.put("IV", 4);
            roman_numerals.put("I", 1);
            String res = "";
            for(Map.Entry<String, Integer> entry : roman_numerals.entrySet()){
              int matches = Int/entry.getValue();
              res += repeat(entry.getKey(), matches);
              Int = Int % entry.getValue();
            }
            return res;
      }
      public static String repeat(String s, int n) {
        if(s == null) {
            return null;
        }
        final StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++) {
            sb.append(s);
        }
        return sb.toString();
      }
    }
    
     
    nguyenha7 likes this.

Chia sẻ trang này

Loading...