Makale numarası: 196652 - Son Gözden Geçirme: 15 Temmuz 2004 Perşembe - Gözden geçirme: 3.2 Implement özel yordamlar yuvarlama nasıl
Bu SayfadaÖzetMicrosoft ürünlerinde bir dizi farklı yuvarlama algoritmalarına vardır. Algoritmalar arasındadır aritmetik yuvarlama Excel'in çalışma sayfası Round() fonksiyonunda Banker'ın yuvarlama CInt() CLng() ve Round() işlevlerinde Visual Basic for Applications yuvarlama. Bu makalede, hangi çeşitli Visual Basic for Applications yuvarlama işlevlerini yapmak ve işlevleri kullanma örnekleri sağlanır açıklanır. Buna ek olarak, makaleyi çeşitli yuvarlama algoritmaları gerçekleştiren örnek işlevleri içerir. Daha fazla bilgiYuvarlama açıklanıyor.Daha fazla duyarlık çok sayıda küçük duyarlık sayıya dönüştürmek istediğiniz yuvarlamak gerekir. Kayan noktalı sayı bir tamsayı dönüştürmek gerektiğinde en sık kullanılan durumdur.Aşağı yuvarlamaYuvarlama basit kesme formdur. Herhangi basamak istediğiniz duyarlık yalnızca göz ardı edilir. VBA Fix() işlevi, kesme örneğidir. Örneğin, Fix(3.5) 3, ve Fix(-3.5) -3.Int() işlevi tamsayıya en yüksek değerden daha az yuvarlar. ınt() hem Fix() - kesiliyor - pozitif bir sayı ile aynı şekilde davranır, ancak farklı sonuçlar için negatif bir sayı verin: -4 Int(-3.5) sağlar. Bir örnek ayn? ?ekilde pozitif ve negatif sayı (mutlak değer) boyutları etkilediğinden simetrik yuvarlama Fix() işlevdir. Boyutları pozitif ve negatif sayıların farklı etkiler, çünkü asimetrik yuvarlama örnek ınt() işlevdir. Excel, benzer bir elektronik tablo işlevleri içerir: ınt() Floor() ve RoundDown(). Int() Visual Basic for Applications ınt() aynı şekilde çalışır. Floor() pozitif değerler keser, ancak negatif bir sayı ile çalışmıyor. RoundDown() işlevi VBA Fix() işlevi ile aynı biçimde çalışır. Microsoft SQL Server, VBA Fix() işlev gibi davranan bir Round() işlevi vardır. SQL Server, VBA ınt() işlevi ile aynı biçimde çalışır bir Floor() işlevi de vardır. Yukarı yuvarlamaSQL Server ve Excel, her zaman için sonraki değer (daha fazla pozitif) kesir değerleri yuvarlar ceiling() adlı bir fonksiyon var.Visual Basic for Applications, karşılık gelen bir Yuvarlak Yukarı işlevi yok. Ancak, negatif sayılar için Fix() hem ınt() yukarı doğru farklı şekillerde yuvarlamak için kullanılabilir. 0'ın doğru Fix() yuvarlar (mutlak anlamda, mutlak boyutları açısından ancak aşağı yukarı). Fix(-3.5)-3.5 ' dir. ınt() 0 uzağa yuvarlar (mutlak boyutları açısından, mutlak bir anlamda ancak aşağı yukarı). Int(-3.5) -4 olur. Aritmetik yuvarlamaHer zaman aşağı veya yukarı yuvarlarken, elde edilen sayı en mutlaka yakın özgün numarası değil. 1'Için basılı 1.9 yuvarlak, örneğin, bu kadar 2 yuvarlak, daha çok daha büyük farktır. 2.4 1.6 Numaralarını 2'ye yuvarlanmasını görmek daha kolaydır.Ancak, ne, yaklaşık 1 ve 2'arasında equidistant olan 1.5? Kuralı tarafından yarım çift yönlü sayı yukarı yuvarlanır. -.5 -1 Veya burada-.5 0 olarak yukarı yuvarlanır, simetrik olmayan bir biçimde yuvarlan?r, simetrik bir biçimde yarı çift yönlü sayıları yuvarlamayı uygulayabilirsiniz. Aşağıdaki işlevler, simetrik aritmetik yuvarlama sağlar: Excel'in Round() elektronik tablo işlevi. SQL Server Round() işlevi, simetrik aritmetik yuvarlama yapabilirsiniz. Asimetrik aritmetik yuvarlama aşağıdaki işlevi girin: Java Math kitaplığı Round() yöntemi. Visual Basic for Applications aritmetik yuvarlama yapar herhangi bir işlev yoktur. Banka'nın yuvarlamaYuvarlanan bir değer eklediğinizde birlikte, her zaman aynı.5 yuvarlama daha fazla sayılarla, büyüyor bir sapma yönü sonuçları birbirine ekleyin. Farkı biçimlendirmek en aza indirmek için bir banka'nın yuvarlama ile yoludur.Banka'nın yuvarlama yuvarlar.5 bazen ayarlayın ve bazen aşağı. 2, 3.5 Ve her ikisi de 4'e yuvarlamasını 4.5, 1.5 hem de 2.5 yuvarlamak için en yakın çift sayıya yuvarlamak için kuralıdır. Banka'nın yuvarlama simetrik olur. Banka'nın yuvarlama, Visual Basic for Applications'de, aşağıdaki sayısal işlevleri gerçekleştirir: CByte(), CInt() CLng() CCur() ve Round(). Banka'nın yuvarlama yapmak yok bir Excel elektronik tablo işlevleri vardır. Rasgele yuvarlamaHatta Banka'nın yuvarlama toplamları bias. Sapma.5 gerçekten rasgele biçimde aşağı veya Yukarı yuvarlama olarak kaldırmak için ek bir adım alabilir. Verileri kasten biased olsa bile, böylece, sapma simge durumunda. Ancak, rasgele rasgele Dağıtılmış veri yuvarlama kullanarak banka'nın yuvarlama değerinden daha büyük bir sapma neden olabilir. Rasgele yuvarlama aynı veriler iki farklı toplamları neden olabilir.Hiçbir Microsoft ürünleri, rasgele yuvarlama yordamın herhangi bir sıralama kullanır. Yuvarlama alternatifDiğer yuvarlama yukarı.5 ile 0,5 aşağı arasında birbirini izleyen çağrılarda yuvarlama.Hiçbir Microsoft ürünleri, diğer bir yuvarlama yordamı uygulayın. Tutarsız uygulanmayan Round() işlev olur.Round() işlevi geçmiş nedeniyle farklı Microsoft ürünleri arasında tutarlı biçimde uygulanmadı.Aşağıdaki tabloda, uygulama için ürün ile ilgilidir:
Product Implementation
----------------------------------------------------------------------
Visual Basic for Applications 6.0 Banker's Rounding
Excel Worksheet Symmetric Arithmetic Rounding
SQL Server Either Symmetric Arithmetic Rounding
or Symmetric Round Down (Fix)
depending on arguments
Java Math library Asymmetric Arithmetic Rounding
Visual Basic 6.0 ve Visual Basic for Applications 6.0 Round() işlevinde, Banka'nın yuvarlama yapar. Bu, kendisine yuvarlamak için ondalık basamak sayısını belirleyen bir isteğe bağlı ikinci bağımsız değişkeni vardır: Örnek veriAşağıdaki tabloda, sayılar ve toplamları oluşturulan bazı örnek veriler ve çeşitli yuvarlama yöntemleri etkisini gösterir.
Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.
---------------------------------------------------------------------
-2.6 -3 -2 -2 -3 -3 -3 -3 -3
-2.5 -3 -2 -2 -2 -3 -2 -2 -3
-2.4 -3 -2 -2 -2 -2 -2 -2 -2
-1.6 -2 -1 -1 -2 -2 -2 -2 -2
-1.5 -2 -1 -1 -1 -2 -2 -1 -1
-1.4 -2 -1 -1 -1 -1 -1 -1 -1
-0.6 -1 0 0 -1 -1 -1 -1 -1
-0.5 -1 0 0 0 -1 0 -1 -1
-0.4 -1 0 0 0 0 0 0 0
0.4 0 0 1 0 0 0 0 0
0.5 0 0 1 1 1 0 1 1
0.6 0 0 1 1 1 1 1 1
1.4 1 1 2 1 1 1 1 1
1.5 1 1 2 2 2 2 1 1
1.6 1 1 2 2 2 2 2 2
2.4 2 2 3 2 2 2 2 2
2.5 2 2 3 3 3 2 3 3
2.6 2 2 3 3 3 3 3 3
Tüm sayıların toplamı: Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- 0.0 -9 0 9 3 0 0 1 0 Tüm negatif sayıların toplamı: Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- -13.5 -18 -9 -9 -12 -15 -13 -13 -14 Pozitif sayının toplamı: Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt. --------------------------------------------------------------------- 13.5 9 9 18 15 15 13 14 14 Tabloda, çeşitli yuvarlama yöntemleri arasındaki fark gösterilir. Rasgele dağıtılmış pozitif ve negatif sayılar, Fix(), simetrik aritmetik yuvarlama, Banka'nın yuvarlama ve yuvarlama değişen rasgele değil, ne kadar gerisinde yuvarlama ile gerçek Toplamlar'den az fark sağlar. Sayılar, ancak ya da tüm pozitif veya negatif tüm banka'nın yuvarlama, yuvarlama değişen ve rasgele yuvarlama fiili toplam gelen en az bir fark sağlar. Örnek kullanıcı tanımlı işlevler yuvarlamaÖrnek kod aşağıdaki işlev kod bölümünde açıklanan yuvarlama türleri için örnek uygulamaları sağlar.Sağlanan işlevler şunlardır:
AsymDown Asymmetrically rounds numbers down - similar to Int().
Negative numbers get more negative.
SymDown Symmetrically rounds numbers down - similar to Fix().
Truncates all numbers toward 0.
Same as AsymDown for positive numbers.
AsymUp Asymmetrically rounds numbers fractions up.
Same as SymDown for negative numbers.
Similar to Ceiling.
SymUp Symmetrically rounds fractions up - that is, away from 0.
Same as AsymUp for positive numbers.
Same as AsymDown for negative numbers.
AsymArith Asymmetric arithmetic rounding - rounds .5 up always.
Similar to Java worksheet Round function.
SymArith Symmetric arithmetic rounding - rounds .5 away from 0.
Same as AsymArith for positive numbers.
Similar to Excel Worksheet Round function.
BRound Banker's rounding.
Rounds .5 up or down to achieve an even number.
Symmetrical by definition.
RandRound Random rounding.
Rounds .5 up or down in a random fashion.
AltRound Alternating rounding.
Alternates between rounding .5 up or down.
ATruncDigits Same as AsyncTrunc but takes different arguments.
Tüm bu işlevleri, iki bağımsız değişkeni alır: yuvarlanmasını numarası ve isteğe bağlı bir faktör. Faktör atlanırsa, sonra işlevleri, yukarıdaki yöntemlerden birini kullanarak oluşturulan bir tamsayı döndürür. Faktör belirtilmezse, sayı farklı yuvarlama efektleri faktörüyle ölçeklenir. Örneğin AsymArith (2.55, 10), 2.6 üretir, bunu diğer bir deyişle, 1/faktörü yuvarlar = 1/10 = 0,1. Not: BIR faktörü, 0, bir çalıştırma hatası üretir: 1/faktörü = 1/0. Aşağıdaki tablo, çeşitli etkenlere etkisini göstermektedir: Expression Result Comment -------------------------------------------------------------------- AsymArith(2.5) 3 Rounds up to next integer. BRound(2.18, 20) 2.2 Rounds to the nearest 5 cents (1/20 dollar). SymDown(25, .1) 20 Rounds down to an even multiple of 10. Yukarıdaki açıklama istisnası, ondalık basamak sayısını bir etmen yerine belirtmenize olanak veren bir şablon işlevi olan ADownDigits ' dir. Expression Result Comment --------------------------------------------------------------------- ADownDigits(2.18, 1) 2.1 Rounds down to next multiple of 10 ^ -1. Liste işleviNot: Excel'in MRound() çalışma sayfası işlevi, yerleşik dışında - yuvarlamayı bağımsız şekilde ADownDigits, ikinci bağımsız değişken, basamak sayısını bir etmen yerine burada belirler, işlevleri gerçekleştirin. Burada sunulan bir yuvarlama uygulamaları, 10 kuvvetine yuvarlanacak sahip olmadığınız için daha esnek olduğu gibi MRound() bir etmen kullanın. Sarıcı işlevleri, ADownDigits şekilde yazabilirsiniz. Nokta kısıtlamaları kayanTüm Burada sunulan bir yuvarlama uygulamaları yaklaşık 15 ondalık basamağı gösterebilir double veri türünü kullanın.Tüm ondalık değerleri tam olarak ifade edilebilir olduğundan, görüntü değer saklanan değeri eşleşmediğinden beklenmeyen sonuçlar alabilirsiniz. Örneğin, 2,25 numarayı dahili olarak olarak, aritmetik yuvarlama sahip aşağı yuvarlama, 2.2499999..., depolanmış olabilir yerine beklediğiniz gibi ayarlayın. Bir sayı ile büyük olasılığı ideal ondalık değeri depolanan ikili değeri farklı put Ayrıca, daha fazla hesaplamaları. Bu durumda, 4 basamağa tam olan para birimi gibi farklı veri türü seçmek isteyebilirsiniz. Variant veri türleri ve <a1>kullanım</a1> her şey olabilir decimal veri türüne dönüştürmek için CDec() 28 ondalık basamağa kadar tam yapma da düşünebilirsiniz. Para birimi değerleri yuvarlamaTam olarak 4 ondalık basamağa kadar olan para birimi veri türünü kullandığınızda genelde cents için 2 ondalık basamak yuvarlamak istediğiniz.Round2CB işlevi için 2 ondalık basamak Banka'nın yuvarlama yapar, ancak özgün numarasını çarpın bir kodlanmış bir türevidir. Bu, Parasal Tutar para birimi veri türü sınırlarını yaklaştığını bildiren, olası taşma koşul engeller. Ondalık değerleri yuvarlamaOndalık veri türünü kullanarak asimetrik aritmetik yuvarlama bir örnek aşağıda verilmiştir:Yuvarlama, bir kısayol olarak duyarlığı siliniyorOkul içinde taught, yuvarlama pozitif sayılar kullanarak yuvarlama genellikle aritmetik aynıdır. Yuvarlama bu türüyle, yalnızca 1 basamak geçmişte olduğu için yuvarlama için numarasını bilmeniz gerekir. Önceki, ilk ondalık basamak basamakları yoksayın. Diğer bir deyişle, duyarlık değerini yuvarlama için bir kısayol olarak bırakılır.2.4 Hem 2.49 2 aşağı yuvarlama yaparken Örneğin 2.5 hem de 2.51 3, yuvarlak edin. Kullandığınız banka'nın yuvarlama (veya diğer yöntemleri.5 yukarı veya aşağı yuvarlamak) veya negatif sayılar asimetrik aritmetik yuvarlama kullanarak yuvarlak, duyarlık bırakarak hatalı sonuçlar için burada, en yakın sayıya yuvarlamak. neden olabilir. Örneğin, Banka'nın yuvarlama ile 2.5 yuvarlar, 2 ve 2.51 3 yuvarlar. -3 Için-2.51 yuvarlar durumdayken asimetrik aritmetik yuvarlama ile en çok -2 nin yuvarlar. Bu makalede sunulan kullanıcı tanımlı işlevler numarası'nın tam duyarlılık yuvarlama yaparken dikkate. ReferanslarVisual Basic Yardımı, sürüm 6.0; konu: ınt, işlevler, düzeltme; yuvarlak işlev Microsoft Transact SQL Yardımı; konu: yuvarlak işlev; <a2>floor fonksiyon</a2>; <a4>Avize işlevi (c) Microsoft Corporation 1998, tüm hakları saklıdır. Tarafından katkıyı Malcolm ılgaz, Microsoft Corporation. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:196652
(http://support.microsoft.com/kb/196652/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste