Chuyển số sang chuỗi mà vẫn giữ số 0 ở đầu

A/c cho e hỏi e muốn nhập vào 1 số rồi chuyển số đó sang dạng chuỗi e có sử dụng hàm String.valueof() nhưng khi nhập vào số có số 0 ở đầu thì nó bị mất số 0 vd: 01, 011…–>1,11…
A/c làm qua rồi cho e cách giải quyết với ạ

Nhập vào biến string luôn là xong. Nhanh, gọn, nhẹ.

5 Likes

:joy::joy::joy: phải nhập số nguyên ấy ạ với lại yêu cầu là số nhập có thể có 0 hoặc k có 0 ạ

Nếu bạn nhập số nguyên, các số 0 đầu Java tự xóa r ._.

Cái nextInt() nhập String rồi gọi parseInt(str) sau đó mới return ra int.
Tuy nhiên parseInt dùng các tính toán để convert sang Int nên số 0 của bạn bị triệt tiêu theo.
-> Thầy cô làm vậy bắt bẻ quá? Hoặc ban đang hiểu sai ý đồ thầy cô? O_O

Ref:
http://www.docjar.com/html/api/java/util/Scanner.java.html (Dòng 2063)
http://www.docjar.com/html/api/java/lang/Integer.java.html (Dòng 444)

5 Likes

Nếu biết chắc chắn số nguyên nhập vào có giá trị nào thì dùng

String formatted = String.format("%0nd", num);
System.out.println(formatted);
// n là số lượng số 0 tối đa thêm vào và thay đổi đc.
// VD n = 3, nhập: 097 thì in ra 097, 
// nhưng nếu nhập 0987 thì sẽ in ra 987, nhập 9 thì in ra 009

Còn nếu như chỉ thêm trường hợp có 1 số 0 vào trước thôi thì mình code bạn xem. Cái này đúng với mọi số nguyên nhập vào, nhưng chỉ thêm 1 số 0 vào trước thôi

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        sc.close();
        int count = 1;
        int b = a;
        while (b > 0)
        {
            b = b/10;
            ++count;
        }
        String s = String.format("%0"+count+"d", a);
        System.out.println(s);
1 Like

StringUtils có hàm leftpad đó, tìm hiểu thử.

Trong thực tế nhiều trường hợp như vậy nè, ID bắt buộc có 6 chữ số, nếu là 1 thì phải là 000001
003456,
cho nên thầy yêu cầu vậy cũng không vấn đề gì :v

4 Likes

ID không phải là số mặc dù có thể nó trông giống như số bạn nhé. Số thì sẽ không có số 0 đứng đầu vì nó vô nghĩa. Có thể dễ dàng thấy được sự phân biệt này giữa cách đọc ID và đọc 1 số
VD: với chuỗi 123456
nếu là số đọc là: 1 trăm 2 mươi 3 ngàn 4 trăm 5 mươi 6
nếu là ID hoặc dạng khác sẽ đọc là: 1 2 3 4 5 6

4 Likes

Thì nó vẫn là “chữ số” thôi. Sao lại không phải nhỉ -.-

1 Like

Bạn đừng nhầm giữa chữ số và số. Số mang giá trị còn chữ số là kí tự. Chữ số là các kí tự từ 0-9 còn số là tổ hợp các chữ số theo 1 trật tự nào đó

1 Like

Thằng nào cũng mang giá trị cả, có điều số tính toán được, chữ số chứa thông tin. mà tớ có lầm lẫn gì đâu nhỉ

1 Like

Nếu vậy thì mình nghĩ là bạn nên cho nhập vào là dạng String luôn, chứ Integer thì sẽ bỏ hết mấy cái số “0” ở đầu :frowning:

Có phải là bạn muốn kiểm tra đó có phải là một số nguyên không á ? Vậy thì bạn có thể code 1 cái đệ quy để làm việc đó thôi :smile:

    private static String get_Int(BufferedReader in) throws IOException
    {        
        System.out.print("Input: ");
        String input = in.readLine();
        try 
        {
            Integer i = Integer.parseInt(input);
            return input;
        } catch (Exception e) 
        {
            System.out.println("Error !!");            
            return get_Int(in);
        }
    }
2 Likes

Thế thì bạn nên xem lại kiến thức toán học cơ sở rồi. Bạn đang nhầm lẫn nghiêm trọng giữa số và chữ số rồi. 1 chuỗi trông giống như số chưa chắc đã là số. Bạn có thể xem lại lịch sử toán học. Con người có thể làm tính ngay cả khi chưa có đầy đủ các chữ số.

1 Like

Mình thấy có sự hiểu nhầm giữa 2 khái niệm trong Database, gọi là Nominal Attribute và Numeric Attribute. Khái niệm Attribute giống như attribute trong sơ đồ EER, hay column trong relation bên relational database.

Trước tiên nói sơ qua về từng khái niệm attribute, cụ thể là discrete attribute, dữ liệu có range là tập hợp hữu hạn hạn (finite set), tập hợp vô hạn đếm được (countably infinte set).

Nominal attribute là tập hợp các giá trị để phân loại, ví dụ gender = { male, female }, hair_color = { brown, blond, red, gray, white }, marital status = { single, married, divorced, and widowed }. Mỗi giá trị (value) trong nominal attribute là định tính (qualitative). Tên gọi khác có thể là “category feature” trong Machine Learning, hay “enumeration” trong programming language.

Nomial attribute có range là finite set (như các ví dụ trên) hoặc countably infinite set như “customer_id” là primary key trong Customer table. “customer_id” thường có giá trị tăng dần từ 1 mỗi khi có 1 row mới được insert vào, nhưng “customer_id” chỉ đại diện cho 1 row trong table. Các phép toán cộng, trừ, nhân, chia trên “customer_id” không có ý nghĩa.

Ordinal attribute là nonimal attribute nhưng có ý nghĩa về sắp sếp (sort) hay xếp hạng (ranking) giữa các giá trị trong ordinal attribute. Ví dụ “drink_size” biểu diễn kích thước 1 ly nước có 3 giá trị { small, medium, large }. Tuy nhiên, ordinal attribute không có biết khoảng cách (distance) giữa các value là bao nhiêu. Khoảng cách giữa medium và small, giữa large và medium?

Cũng như nominal attribute, các phép toán cộng, trừ, nhân, chia trên ordinal attribute của nó không có ý nghĩa. Ordinal attribute có thể là finite set hoặc coutably infinite set.

Numeric Attribute chứa các giá trị định lượng (quantitative value), thường được biểu diễn bằng số nguyên hay số thực. Numeric value có thể cộng, trừ, nhân, chia. Vì vậy mà có thể tính các giá trị thống kê trung bình mean. Việc tính mean trên nonimal attribute là không có ý nghĩa. Vài ví dụ: “temperature” lưu trữ nhiệt độ từng ngày, “years_of_experiment” lưu trữ số năm kinh nghiệm làm việc của nhân viên.


Về khái niệm số của OP thì phải xem nó thuộc nominal hay numeric.
Giả sử, nếu số ở đây là “salary”, công đoạn chuyển sang string chỉ để hiển thị UI thì, thì con số đó áp dụng các phép toán cộng, trừ,… đều được. Con số đó thuộc dạng numeric.
Nếu nó chỉ là “product_id” trong Product table thì nó lại có dạng là nominal. Lúc chuyển sang string có thể dựa vào “id” lớn nhất để thêm số 0 vào đầu chữ số hoặc theo quy định “có chiều dài là 6 chữ số”


Lúc mình viết thấy có vẻ lạc đề, nhưng lỡ viết rồi nên ấn reply luôn.
Nếu thấy có ích thì không có gì. :penguin:
Nếu thấy nó “lạc” thật thì làm ơn bơ qua comment của mình nha. :grimacing:

3 Likes

Làm 1 cái điều kiện if ở đó, nếu ký tự đầu tiên là 0 thì in ra số 0 cộng với chính giá trị đó còn không phải thì làm bình thường, nghĩ đơn giản thôi.

5 Likes

dùng string.Padlef.
link C# microsoft:https://msdn.microsoft.com/fr-fr/library/92h5dc07(v=vs.110).aspx

2 Likes

Nhập ID, đt hay gì :smiley: ID không bao giờ là số, mà là chuỗi số. Số bình thường sao lại chèn 0 đầu?

Btw,

2 Likes

thế mình có lầm lẫn gi nhỉ.

sao đá nhau chan chát vậy. Tớ không rành trước đây người ta dùng gi đế tính. Muốn xem nó là số hay ko thì đặt nó vào ngữ cảnh thôi.

1 Like

Đá nhau chỗ nào bạn, bạn chỉ ra hộ mình cái. Nếu bạn thiếu kiến thức cơ bản thì nên bổ sung lại. Thân. Số và chữ số là kiến thức ở tiểu học bạn có thể xem lại

1 Like

Như bạn nói là tổ hợp đấy. vậy cái ID đó hẳn là số?

Tranh luận thì lo tranh luận, toàn lo công kích cá nhân không vậy?

1 Like

Thế thì bạn lại nhầm cơ bản khi suy luận logic rồi. Mình nói số là 1 tổ hợp các chữ số không có nghĩa tổ hợp các chữ số là số vì sẽ có 1 số trường hợp tổ hợp các chữ số không tạo ra 1 số hợp lệ.
Câu phát biểu trên của mình cũng tương đương với nhận xét chó là 1 loài động vật nhưng không có nghĩa động vật là chó hay bất kì 1 nhận xét nào tương tự thế. Hiểu chưa bạn. Còn vì sao mình bảo bạn xem lại kiến thức toán cơ bản vì bạn đang hiểu lẫn lộn giữa 2 khái niệm chữ số và số. Nếu bạn xem đó là công kích cá nhân không cho ai đụng đến bạn thì mình cũng chịu, không biết nói gì hơn.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?