2008-10-30 26 views
8

4 sütunun üzerine bölmek istediğim ürün markalarım var. Yani, eğer 39 markam varsa, o zaman her sütun için maksimum madde sayımının 10 olmasını istiyorum (son sütunda tek bir boşluk ile. Bir sütun için öğe sayısını nasıl hesaplıyorum (C# kullanarak):Tamsayılı matematik C#

int ItemCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(BrandCount)/4m)); 

Tüm bu dönüşüm benim için gerçekten çirkin görünüyor C# tamsayılar üzerinde matematik yapmak için daha iyi bir yolu var mı

cevap

21

Sen yayınlayabileceğim:.?.

Ayrıca

210, bir decimal içinde int/decimal sonuçlar atmalarını birini kaldırmak çünkü:

int ItemCount = (int) Math.Ceiling(BrandCount/4m); 
+0

Yazmak üzereydim. +1. – OregonGhost

+0

Yazımı ben yaralarımı yazdım. :) +1 de. –

+0

Vay, bu çok daha temiz. Teşekkürler. –

7

Mod ile daha uzun bir alternatif

ItemCount = BrandCount/4; 
if (BrandCount%4 > 0) ItemCount++; 
+2

uzun

int ItemCount = (BrandCount+3)/4; 

+3 emin ziyade aşağı daha yukarı yuvarlamak yapar? Daha basit! +1 – Treb

2

Belki böyle bir şey deneyin ... BrandCount varsayarsak bir tam sayıdır. Hala aynı yayınları var, ama daha net olabilir:

int ItemCount = (int)(Math.Ceiling(BrandCount/4m)); 

Ben Convert sınıfının büyük bir hayranı değilim, ve mümkün ben bunu önlemek. Her zaman benim kodumun okunaksız görünmesini sağlıyor.

+0

Size tamamen katılıyorum -> Convert.ToInt32 (foo) (int) foo ile karşılaştırıldığında çirkin. –

+0

Peki, cast, Convert ile aynı şeyi yapıyor mu? –

+1

@Ben Mills: Bu durumda, evet (dönüştürme sayıları). Genel olarak hayır. – OregonGhost

10

Ondalık neden kullanıyorsunuz?

(37+3)/4 == 40/4 == 10 
(38+3)/4 == 41/4 == 10 
(39+3)/4 == 42/4 == 10 
(40+3)/4 == 43/4 == 10 

Genelde:

public uint DivUp(uint num, uint denom) 
{ 
    return (num + denom - 1)/denom; 
} 
+2

Hile seviyorum, ancak kodun amacını görmek daha zor olduğunu düşünüyorum. Kabul ettiğim cevap geri gelmek ve korumak kolaydır. –

+0

Sen buna * diyorsun * bir numara mı? Programların en önemsiz olanını korumanızı engellemiyorum ... – Motti

+6

seriously - ceil (a/b) = ((a + b-1)/b) "hile" programcılarının C# yıl önce. – cce