• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Round saçmalıyor arkadaşlar

Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Gönderdiğim örnekte round fonksiyonun kullanıyorum yuvarlamak için ancak 1,005
olan bir sayıyı round(sayı,2) tarzında yuvarladığımda 1,00 yapıyor olması gereken
1,01 yardım edebilirseniz sevinirim herkeze ii çalışmalar.
 
bu konu bir kaç kez yine geçti.

veyselemre adlı üye aşağıdaki linkte, aşağıdaki şekilde çözüme kavuşturmuş sağolsun.

http://www.excel.web.tr/showthread.php?t=36870&highlight=application

Kod:
Sub aa()
Dim deger1 As Double, deger2 As Double
Set ex = CreateObject("excel.application")
deger1 = 11.025
deger2 = 11.875

MsgBox ex.worksheetfunction.Round(deger1, 2)
MsgBox ex.worksheetfunction.Round(deger2, 2)
Set ex = Nothing
End Sub
 
Sayın yeni54 bu cevabı gördüm zaten excel den fonksiyon çağırmak yerine daha farklı bir çözümü olup olmadığını öğrenmek için sordum ilgilendiğiniz içinde teşekkür ederim başka bir çözüm biliyormusunuz acaba?
 
Sayın kocivan,

Kodlarda round fonksiyonunu kullanmayın. Form üstünde ilgili alanın biçimini standart ondalık kısmını ise 2 olarak ayarlayıp deneyin.

İyi çalışmalar
 
Merhaba;

Kod:
Me.Metin4.Value = Round((Me.Metin0.Value [COLOR="Red"]+ 0.1[/COLOR]) * Me.Metin2.Value, 2)
    Me.Metin6.Value = Round((Me.Metin0.Value [COLOR="red"]+ 0.1[/COLOR]) * Me.Metin2.Value, 2)
    Me.Metin8.Value = Me.Metin0 + Me.Metin4 + Me.Metin6

olur..
 
Sayın

Aşağıdaki fonksiyonu kullanın. (Kodları bir modüle kopyalayıp kaydedin)
Kod:
Public Function RoundToLarger(dblInput As Double, intDecimals As Integer) As Double
    
    'Implements a variant of the Round() function, that rounds-to-larger
    'rather than rounds-to-even, like in Excel:
    Dim strFormatString As String 'Format string
    Dim strResult As String
    'If input is zero, just return zero. Else format as appropriate:
    If dblInput <> 0 Then
        strFormatString = "#." & String(intDecimals, "#")
        If Right(strFormatString, 1) = "." Then
            strResult = Format(dblInput, "#")
        Else
            strResult = Format(dblInput, strFormatString)
        End If
    Else
        strResult = "0"
    End If
    
    'If the result is zero, Format() will return "." - change this to "0":
    If strResult = "." Then
        strResult = "0"
    End If
    
    RoundToLarger = CDbl(strResult)
End Function

Kod:
RoundToLarger(Metin0*Metin2,2)
Olarak kullanın

İyi çalışmalar
 
Say&#305;n beab05 sizin yapt&#305;&#287;&#305;n&#305;zda fon hanesi 100.50 &#231;&#305;k&#305;yor 1.01 &#231;&#305;kmas&#305; laz&#305;m say&#305;n modal&#305; sizin s&#246;yledi&#287;iniz gibi zaten &#246;renekte ancak toplama yapt&#305;&#287;&#305;m&#305;zda &#246;rne&#287;i incelerseniz sonu&#231; 102,51 &#231;&#305;k&#305;yor do&#287;rusu 102,52 olmal&#305; ilgilendi&#287;iniz i&#231;in ikinizede te&#351;ekk&#252;rler ama ikiside sorunu &#231;&#246;zmedi.
 
Kesinlikle do&#287;ru cevap say&#305;n modal&#305; &#231;ok te&#351;ekk&#252;rler yard&#305;m etmeye &#231;al&#305;&#351;an t&#252;m herkezede tekrar te&#351;ekk&#252;r ederim iyi &#231;al&#305;&#351;malar herkeze.
 
Sayın beab05 sizin yaptığınızda fon hanesi 100.50 çıkıyor 1.01 çıkması lazım sayın modalı sizin söylediğiniz gibi zaten örenekte ancak toplama yaptığımızda örneği incelerseniz sonuç 102,51 çıkıyor doğrusu 102,52 olmalı ilgilendiğiniz için ikinizede teşekkürler ama ikiside sorunu çözmedi.

Çok ilginç doğrusu bende 1.01 ve 102.52 çıkıyor? farkımız nerde acaba ? ;)
 
&#246;nceki seferlerde de kafam&#305; kurcalam&#305;&#351; ancak &#252;zerine pek d&#252;&#351;memi&#351;tim.

&#351;imdi k&#305;sa bir u&#287;ra&#351; vereyim dedim.

round u birka&#231; say&#305;da denedim. olmas&#305; gerekti&#287;i gibi 5 ve &#252;zeri say&#305;lar&#305; yuvarlamas&#305; gerekirken 5 in &#252;zeri olanlar&#305;n&#305; yuvarl&#305;yor.

yani, round(1,005,2) yi 1 olarak yuvarl&#305;yor.

o halde olabilecek en k&#252;&#231;&#252;k double say&#305;y&#305; &#231;&#305;kan sonuca toplay&#305;p o &#351;ekilde round edersek do&#287;ru sonuca ula&#351;&#305;yor.

bu &#246;rnekte, round(100.5 * 0.01,2) yapmak yerine
round((100.5 * 0.01) + 0.0000001),2) yap&#305;nca do&#287;ru oluyor.

yani beab05 in dedi&#287;i gibi bir rakam toplayaca&#287;&#305;z ancak double &#305;n kab&#252;l etti&#287;i en k&#252;&#231;&#252;k 0.0000....1 rakam&#305;n&#305;.

tabi daha ak&#305;lc&#305; bir y&#246;ntem bulmak laz&#305;m oldu&#287;u kesin.
 
Kod:
Private Function myRound(sayi As Double, basamak As Byte) As Double
    myRound = Round((sayi + 0.00000001), basamak)
End Function

Kod:
myRound(Metin0*Metin2,2)

olarak kullan&#305;nca da do&#287;ru sonucu veriyor.

&#231;e&#351;it olsun diye yazd&#305;m.

say&#305;n modal&#305; n&#305;n verdi&#287;i fonksiyonu kullanmak laz&#305;m.
 
&#304;lgin&#231; olan 0.01 ile toplay&#305;nca bende do&#287;ru sonu&#231; &#231;&#305;k&#305;yor.. Versiyon fark&#305; m&#305; acaba??

Yeni54 super a&#231;&#305;klama yapm&#305;&#351;s&#305;n. Te&#351;ekk&#252;r ederiz...
 
Sayın beabe05,

Haklısınız versiyon farkı. Access 2002 ve 2003 de böyle oluyor.


İyi çalışmalar
 
Selam,
&#304;stenen sonucu bu &#351;ekilde verdi.
Kod:
Private Sub Komut10_Click()
    Me.Metin4.Value = Round(CStr(Me.Metin0.Value) * CStr(Me.Metin2.Value), 2)
    Me.Metin6.Value = Round(CStr(Me.Metin0.Value) * CStr(Me.Metin2.Value), 2)
    Me.Metin8.Value = Me.Metin0 + Me.Metin4 + Me.Metin6
End Sub
 
B&#246;yle basit bir&#351;eyi atlam&#305;&#351; olmalar&#305; ger&#231;ekten &#231;ok garip tasarlarken microsoft hi&#231; mi hesap yapmad&#305; bunlarla.
 
San&#305;r&#305;m yerel say&#305; format&#305;ndan kaynaklan&#305;yor. "," ve "." fark&#305;. String veritipine &#231;evrildi&#287;inde sorun ortadan kalk&#305;yor..
 
dedi&#287;iniz do&#287;ru say&#305;n anemos de&#287;i&#351;ken tan&#305;mlarken string olarak tan&#305;mlad&#305;&#287;&#305;mda sorun devam ediyor ama sizin yapt&#305;&#287;&#305;n&#305;z gibi stringe &#231;evirdi&#287;imizde sorun &#231;&#246;z&#252;l&#252;yor.
 
Geri
Üst