Round saçmalıyor arkadaşlar

Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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.
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
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
 
Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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?
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
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
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
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..
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
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
 
Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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.
 
Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
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 ? ;)
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
&#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.
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
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.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
&#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...
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın beabe05,

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


İyi çalışmalar
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
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
 
Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
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..
 
Katılım
27 Kasım 2006
Mesajlar
152
Excel Vers. ve Dili
office xp
Altın Üyelik Bitiş Tarihi
13-09-2021
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.
 
Üst