Từ số thập phân chuyển thành phân số (0.5=1/2)?

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi Tuanktcdcn, 2 Tháng tư 2005.

16,547 lượt xem

  1. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    49
    Nơi ở:
    Hà Nội
    Mình có cột A chứa các giá trị:
    A1=0.5
    A2=0.75
    A3=1.5
    A4=1.25
    ...các số lẻ
    Mình muốn cột B vào công thức sao cho có các giá trị phân số như:
    B1=1/2 (không phải là 2/4)
    B2=3/4
    B3=3/2
    B4=5/4
    Rất mong các bạn chỉ giúp.
     
    Last edited: 2 Tháng tư 2005
    #1
  2. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    Hi`, thầy lại ra đề rồi!
    Em sẽ về cày Excel xem có trả lời được câu hỏi của thầy không nhé! Không biết có liên quan gì đến format/Custom?
     
    #2
  3. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Dùng các công cụ có sẵn của Excel thì mình không biết.
    Nên bạn có thể dùng VB để viết hàm:

    Ý tưởng của mình là: 1/2 = 0.5 thì 0.5 * 2 = 1

    Goi x là số thập phân, a/b là phân số
    Bạn dùng một vòng lặp Until hoặc while:
    Nhân x với b,
    tăng dần b lên 1 đơn vị
    Nhân cho đến khi nào kết quả là một số nguyên, kết quả đó là số a
    Và bạn được phân số là: a/b

    Bạn cũng cần phải gán cho b giá trị là 1 hoặc 2 trước khi vào vòng lặp
    Và phải lưu ý, số thập phân của bạn không nên để là số thập phân vô hạn, nên cần phải làm tròn trước.

    Bạn nên cẩn thận với những loại vòng lặp UNTIL hay WHILE, phải có điều kiện để dừng vòng lặp.

    Bạn cũng có thể dùng đệ quy mà không cần dùng vòng lặp đối với những bài toán rắc rối hơn. Dùng đệ quy thì chương trình ngắn gọn hơn, hay hơn nhưng khó hơn một chút.
     
    Last edited: 3 Tháng tư 2005
    #3
  4. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Bác ơi đây là sở đoản của em ạh!
    Bác vào Number format chọn custom
    Bên phần type bác gỏ chuổi sau sẽ giúp được bác ạh :

    "##/##"

    (bác hiểu đúng không, không cần dấu ngoặc kép)

    To IChiNoVa bạn chắc mới vào nên không biết chứ bác Tuanktcdcn là một cao thủ VBA đấy.
     
    Last edited: 4 Tháng tư 2005
    #4
  5. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    49
    Nơi ở:
    Hà Nội
    To IchiNoVa Theo cách của bạn là hoàn toàn đúng, nhưng theo cách này thì để có được kết quả phải đợi khá lâu để máy thực hiện xong (vì hàm này có thể phải dùng cho rất nhiều cell với các giá trị và đơn vị thập phân khác nhau). Tư tưởng của mình là không dùng VB hay VBA.
    To OverAC Theo cách của bạn sáng tạo và hoàn toàn đúng nhưng ý mình không phải vậy.
    Xin lỗi các bạn vì câu hỏi không rõ ràng!

    Mình muốn lập công thức để cho ra giá trị là phân số?
    Mình nghĩ để lập được công thức này cũng khá rắc rối nên muốn các bạn giúp cùng.
    I rất mong nhận được thêm câu trả lời của các bạn.
     
    #5
  6. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Thưa bác
    Việc thể hiện ra như thế chỉ có thể là một trong giá trị hoặc là chuổi hoặc là số. Nếu bác muốn nó là số thì em cho rằng bác phải làm như em đã nói nếu bác muốn kết quả của nó thành một chuổi thì em cũng có thể giúp bác. Bác có thể sử dụng hàm sau để biến nó thành một chuổi.
    = text(A1,"##/##")
    Rồi xong! Bây giờ thì giá trị ở ô B1 là một chuổi và bác có thể tha hồ xử lý chuổi này theo ý bác. Hy vọng là đúng với yêu cầu của bác.
    Nếu bác muốn làm như ý của IChiNoVa bằng một công thức thì kế quả hiện ra phải là một chuổi đúng ko nào! Và như vậy thì bác sử lý như thế nào đi chăng nửa thì em vẩn tin rằng nó dài dòng hơn cách của em.
    Nếu không thì em cũng có ý tưởng này:
    Ví dụ: 0.5
    = 5/UCLN(5,10) & "/" & 10 /UCLN (5,10)

    Hàm ước chung lớn nhất em nhớ là đã thấy qua nó ở đâu đấy em quên mất tiêu rồi
     
    #6
  7. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    49
    Nơi ở:
    Hà Nội
    To OverAC: đúng rồi! cách của bạn cho phép lại + - * / vì nó là kiểu số. I vẫn khẳng định cách làm của bạn đúng và sáng tạo và hay! Tuy nhiên ý mình là lập công thức (từ A-Z không dùng format) để cho ra giá trị là phân số (là giá trị kiểu văn "Text").
    OverAC và các bạn tiếp tục giúp nhé!
     
    #7
  8. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Bạn không nên dùng chức năng Format bởi trong một vài trường hợp, kết quả sẽ là hỗn số chứ không phải phân số.

    Nếu bạn không muốn dùng VBA thì có thể dùng hàm của Excel:
    là hàm lấy UCLN, hàm đó là GCD. Nhưng trước hết bạn cần vào:
    Tools - Add ins, trong hộp Add ins bạn chọn Analysis ToolPak, rồi OK.

    Bạn cần phân tích các số thập phân ra, thành dạng gồm tử số và mẫu số nguyên, rồi sau đó tiến hành lấy UCLN của tử và mẫu, rồi biến nó thành chuỗi.

    Cách làm như sau:
    Bạn đếm bằng mắt xem, phần thập phân có mấy con số, giả sử là n.
    Nhân số thập phân của bạn cho 10^n để có tử số, còn mẫu số là 10^n

    VD: 1.02 Có 2 chữ số ở phần thập phân, nên có thể đổi nó thành phân số là 102/100
    Trong đó 102 là 1.02*(10^2), còn 100 là 10^2.

    Bạn nên định dạng cho cột chứa số thập phân, để các số thập phân đều có cùng lượng chữ số sau dấu phẩy. Để có thể thống nhất được số n ở trên, và dế tính toán hơn, Làm như vậy trông cũng đẹp mắt hơn.
    VD:
    1.050
    2.100
    0.003

    Ở đây mình định dạng là 3 số ở phần thập phân, như vậy, tử số sẽ là: (số thập phân*1000), còn mẫu số sẽ là: 1000.

    Để tìm UCLN bạn dùng hàm sau: GCD(tử số, mẫu số)
    Tiếp theo chia tử và mẫu cho UCLN vừa tìm được để đơn giản phân số, rồi nối chúng lại thành chuỗi bằng hàm
    TEXT(tử sau khi rút gọn,0) & "/" & TEXT(mẫu sau khi rút gọn,0)
     
    Last edited: 5 Tháng tư 2005
    #8
  9. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Mong bạn IChiNoVa chỉ giáo là trường hợp nào sẽ là hổn số
     
    #9
  10. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Mong bạn thứ lỗi, có lẽ, mình nhầm chăng, cách dùng chức năng Format của bạn rất chính xác, xin cám ơn, bạn đã chỉ ra chỗ sai lầm của mình.
     
    #10
  11. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    49
    Nơi ở:
    Hà Nội
    Xin cảm ơn sự đóng góp và giúp đỡ của OverAC và IchiNoVa, hai bạn đã đưa ra hai cách để cho ra kết quả.
    Mình muốn có cách thứ ba là dùng công thức? Các bạn khác có cách gì không?
    Xin chân thành cảm ơn!
     
    #11
  12. KKBS

    KKBS Thành viên sơ cấp

    Bài viết:
    53
    Đã được thích:
    0
    Nơi ở:
    HCM
    Sao các bạn không dùng định dạng của Excel ?!!!

    Giả sử ô A1 chứa con số 0.5.

    1. Chọn ô A1 bằng cách click vào ô này.
    2. Trên menu Format, chọn Cell...
    3. Chọn tab Number
    4. Trong Category, chọn Fraction (Chọn thêm Type nếu cần thiết)

    Hy vọng như vậy đáp ứng nhu cầu của bạn.

    Thân,
    KKBS.
     
    #12
  13. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Mình đã đưa ra công thức đó.
    Vd: ô A1=0.020
    ô A1 đáng lẽ là 0.02 nhưng bạn nên định dạng 3 chữ số lẻ hoặc có thể hơn nữa là 0.020.
    Nhằm mục đích dễ tính toán, mà trông cũng đẹp, bởi số nào cũng có 3 số lẻ.
    Các bước lập CT ở các ô tiếp như sau:

    Bước 1: biến đổi tí chút. A1 là tử số, A2 là mẫu số.
    A2=A1*1000
    A3=1000

    Bước 2: Lấy UCLN.
    A4=GCD(A2,A3)

    Bước 3: Rút gọn.
    A5=A2/A4
    A6=A3/A4

    Bước 4: Nối chúng lại thành text.
    A7=Text(A5,0) & "/" & Text(A6/0)
     
    #13
  14. Ly Thai Diep

    Ly Thai Diep Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Giới tính:
    Nam
    B1=A1*1000000/GCD(A1*1000000;1000000)&"/"&1000000/GCD(A1*1000000;1000000)
    Điều kiện: Phần thập phân không quá 6 chữ số
     
    #14
  15. Espresso

    Espresso Thành viên thân thiết

    Bài viết:
    108
    Đã được thích:
    34
    try
    B1=INT(A1/0.5)&"/2"
    B2=INT(A2/0.25)&"/4"
    B3=INT(A3/0.5)&"/2"
    B4=INT(A4/0.25)&"/4"

    Or
    =TEXT(A1,"##/##")

    the most basic concepts
    have fun !
     
    Last edited: 19 Tháng mười hai 2015
    #15

Chia sẻ trang này