Làm tròn số theo điều kiện cho trước (1 người xem)

  • Thread starter Thread starter gemgem
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

gemgem

Thành viên mới
Tham gia
8/1/13
Bài viết
4
Được thích
0
Chào các Pro.các bác cho e hỏi có cách nào làm tròn số thành 1 nguyên mà số này là bội chung của 2 số khác 1 nhé.
Ví dụ em tính ra kết quả là 40.14 nếu làm tròn lên sẽ là 41, nhưng mà 41 không chia được thành 2 số AxB được nên phải làm tròn thành 42 = 7x6. Các pro nào biết giúp em với-0-/.
 
mình làm thử như vậy
thí dụ cell k17 chưa số đã làm tròn của bạn 41
thử xem nha
=IF(OR(MOD(K17,2)=0,MOD(K17,3)=0,MOD(K17,5)=0,MOD(K17,7)=0),K17,K17+1)
chỉ giới hạn chia hết trong phạm vi 10, còn lớn hơn nữa thì chưa tính được thí dụ như 13X15 (chia hết cho 13 và 15).
 
mình làm thử như vậy
thí dụ cell k17 chưa số đã làm tròn của bạn 41
thử xem nha
=IF(OR(MOD(K17,2)=0,MOD(K17,3)=0,MOD(K17,5)=0,MOD(K17,7)=0),K17,K17+1)
chỉ giới hạn chia hết trong phạm vi 10, còn lớn hơn nữa thì chưa tính được thí dụ như 13X15 (chia hết cho 13 và 15).

nếu gặp số rất lớn thì còn phải viết nữa vì phải chọn số nguyên tố, em nghĩ bài này không dùng công thức được phải dùng VBA, lấy ví dụ kết quả chia được là 32655654896,1023 chẳng hạn thì người bình thường làm sao mà mò nổi.

Dùng vba viết code như thế nào thì em chịu ^^
 
Chào các Pro.các bác cho e hỏi có cách nào làm tròn số thành 1 nguyên mà số này là bội chung của 2 số khác 1 nhé.
Ví dụ em tính ra kết quả là 40.14 nếu làm tròn lên sẽ là 41, nhưng mà 41 không chia được thành 2 số AxB được nên phải làm tròn thành 42 = 7x6. Các pro nào biết giúp em với-0-/.

Không hiểu là bạn định làm tròn lên, hay tròn xuống ,
Nhưng mình cũng đóng góp 1 hàm thủ công bằng vb
Mã:
Function Check(num As Long) As Boolean
        If InStr("1,2,3,5,7", num) Then
            Check = True
            Exit Function
        End If
        t = 1
        With CreateObject("Scripting.Dictionary")
            For i = 1 To num \ 2
                .Add (i * 2), ""
            Next
            For i = 1 To num \ 3
                If Not .exists(i * 3) Then .Add (i * 3), ""
            Next
            For i = 1 To num \ 5
                If Not .exists(i * 5) Then .Add (i * 5), ""
            Next
            For i = 1 To num \ 7
                If Not .exists(i * 7) Then .Add (i * 7), ""
            Next
            If .exists(num) Then
                Check = False
            Else
                Check = True
            End If
        End With
End Function
PHP:
Public Function Roundaxb(num As Double) As Long    
     While Check(Round(num)) = False        
             num = Round(num) + 1   
     Wend   
     Roundaxb = num
End Function
 
Chào các Pro.các bác cho e hỏi có cách nào làm tròn số thành 1 nguyên mà số này là bội chung của 2 số khác 1 nhé.
Ví dụ em tính ra kết quả là 40.14 nếu làm tròn lên sẽ là 41, nhưng mà 41 không chia được thành 2 số AxB được nên phải làm tròn thành 42 = 7x6. Các pro nào biết giúp em với-0-/.

Gỉa sử số được gõ tại cell A1, vậy:
- Đặt 1 name:
Mã:
=ROW(INDIRECT("2:"&INT(SQRT(INT($A$1)))))
- Công thức làm tròn:
Mã:
=IF(INT(A1)>3,IF(OR((MOD(INT(A1),tmp)=0)),INT(A1),INT(A1)+1),4)
Nhờ các bạn test lại nhé (không biết trúng không)
 

File đính kèm

Cái hàm mà bác đưa ra thì nó sẽ trả về số chẵn. em muốn là luôn làm tròn lên và ko nhất thiết phải là số chẵn mà số lẻ cũng được.
Vd như 8.3 thành 9=3x3 chẳng hạn
 
Vd như 8.3 thành 9=3x3 chẳng hạn
Cái này mâu thuẫn với câu hỏi lúc đầu của bạn nha, kết quả phải là 8 chứ, vì 8 có là số nguyên tố đâu
ndu96081631 đã viết:
Nhờ các bạn test lại nhé (không biết trúng không)
của thầy như vậy khi dùng với tích của các số với số nguyên tố thì không đúng nữa ví dụ: 49,21,121...

Với trường hợp không tính số mà có phần nguyên là tích của các số nguyên tố thì em có thể dùng công thức này:
PHP:
=INT(A1)+(MOD(A1,2)<>0)*(MOD(A1,3))*(MOD(A1-5,6)=0)+(MOD(A1,2)<>0)*(MOD(A1,3))*(MOD(A1-1,6)=0)
(A1: là ô có dữ liệu cần chuyển)
còn không thì để xét có phải số nguyên tố chỉ có VBA
 
Cái hàm mà bác đưa ra thì nó sẽ trả về số chẵn. em muốn là luôn làm tròn lên và ko nhất thiết phải là số chẵn mà số lẻ cũng được.
Vd như 8.3 thành 9=3x3 chẳng hạn

Muốn vậy cũng dễ thôi! Chổ nào có INT(A1) thì sửa thành ROUNDUP(A1, 0)
Cụ thể sửa name thành:
Mã:
=ROW(INDIRECT("2:"&ROUNDUP(SQRT(INT($A1)),0)))
Công thức:
Mã:
=IF(ROUNDUP(A1,0)>3,IF(OR((MOD(ROUNDUP(A1,0),tmp)=0)),ROUNDUP(A1,0),ROUNDUP(A1,0)+1),4)
Công thức mảng, phải Ctrl + Shift + Enter
 

File đính kèm

mình làm thử như vậy
thí dụ cell k17 chưa số đã làm tròn của bạn 41
thử xem nha
=IF(OR(MOD(K17,2)=0,MOD(K17,3)=0,MOD(K17,5)=0,MOD(K17,7)=0),K17,K17+1)
chỉ giới hạn chia hết trong phạm vi 10, còn lớn hơn nữa thì chưa tính được thí dụ như 13X15 (chia hết cho 13 và 15).
Cái này của bác chưa được rồi. em ví dụ như số 7 chẳng hạn. nó chia hết cho 7 nên sẽ vẫn làm tròn là 7.nhưng mà 7=?x? ( không tính 7x1 đâu nhé)/-*+/
 
của thầy như vậy khi dùng với tích của các số với số nguyên tố thì không đúng nữa ví dụ: 49,21,121...

Với trường hợp không tính số mà có phần nguyên là tích của các số nguyên tố thì em có thể dùng công thức này:

Có ai yêu cầu thế đâu. Người ta chỉ nói:
có cách nào làm tròn số thành 1 nguyên mà số này là bội chung của 2 số khác 1
 
Muốn vậy cũng dễ thôi! Chổ nào có INT(A1) thì sửa thành ROUNDUP(A1, 0)
Cụ thể sửa name thành:
Mã:
=ROW(INDIRECT("2:"&ROUNDUP(SQRT(INT($A1)),0)))
Công thức:
Mã:
=IF(ROUNDUP(A1,0)>3,IF(OR((MOD(ROUNDUP(A1,0),tmp)=0)),ROUNDUP(A1,0),ROUNDUP(A1,0)+1),4)
Công thức mảng, phải Ctrl + Shift + Enter
cho em hỏi công thức này thì áp dụng được cho 1 số có bao nhiêu chữ số : ví dụ 41 nghìn tỉ lẻ mấy trăm có được không ?
Sao e test và nó báo lỗi nhj
 
cho em hỏi công thức này thì áp dụng được cho 1 số có bao nhiêu chữ số : ví dụ 41 nghìn tỉ lẻ mấy trăm có được không ?
Sao e test và nó báo lỗi nhj

Công thức có dùng hàm ROW, vậy nên đương nhiên sẽ có giới hạn rồi ---> Số lớn quá không chơi được
Ngoài ra, hàm MOD cũng có giới hạn luôn
 
Ngoại trừ số 2, số nguyên tố luôn luôn là số lẻ. Vì vậy trong giải thuật tính số nguyên tố người ta tính kể tử số 3 trở đi và nhảy bước 2. Gawpj số lớn, giải thuật này giảm công đoạn tính được gần phân nửa.
Trong trường hợp này, ta dùng mảng

=1+2*ROW(INDIRECT("1:"&ROUNDUP(SQRT(INT($A1))/2,0)))
 
Thử dùng VBA:
Dùng 1 hàm kiểm tra số nguyên tố, và 1 hàm làm "tròn" theo yêu cầu, nếu không đạt tính lại với số cũ cộng 1.
Tính được với số với 15 chữ số (giới hạn thể hiện của excel)

PHP:
Function SoNT(ByVal MyNum) As Boolean
If MyNum <= 3 Then SoNT = True: Exit Function
If Val(Right(MyNum, 1)) Mod 2 = 0 Then SoNT = False: Exit Function
For i = 2 To Int(MyNum ^ (0.5))

    If MyNum / i = Int(MyNum / i) Then
        SoNT = False: Exit Function
    Else
        SoNT = True
    End If
Next
End Function
PHP:
Function RoundNT(MyNum1 As Double)
tmp = Application.RoundUp(MyNum1, 0)
If SoNT(tmp) = False Then
    RoundNT = tmp: Exit Function
Else
    RoundNT = RoundNT(tmp + 1)
End If
End Function
 

File đính kèm

Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom