Değerleri en yakın tam sayıya nasıl yuvarlayabilirim?
Örneğin:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" bana yardımcı olmuyor. Herhangi bir fikir?
Değerleri en yakın tam sayıya nasıl yuvarlayabilirim?
Örneğin:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" bana yardımcı olmuyor. Herhangi bir fikir?
Yanıtlar:
Daha fazla bilgi için resmi belgelere bakın . Örneğin:
Temel olarak Math.Round
yönteme üç parametre verirsiniz .
Basit kod:
var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3
MidpointRounding.AwayFromZero
.5 değerinin yuvarlanmasını istiyorsanız ihtiyacınız var . Maalesef bu varsayılan davranış değil Math.Round()
. Kullanılıyorsa MidpointRounding.ToEven
(varsayılan) değer en yakın çift sayıya 1.5
yuvarlanır ( yuvarlanır 2
, ancak 2.5
aynı zamanda yuvarlanır 2
).
away from zero
anlamına da gelir . -1.5
-2
İhtiyacın Math.Round
yok Math.Ceiling
. ondalık noktadan sonraki değere bağlı olarak yukarı veya aşağı yuvarlarken Ceiling
her zaman yukarı "yuvarlar" Round
.
bu kılavuz var ve çok da sevimli bir yol var:
double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;
int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);
herhangi bir sayıya 0.5 ekleyin ve bunu int'e çevirin (veya katlayın) ve matematiksel olarak doğru şekilde yuvarlanır: D
Tam olarak istediğinizi yapan Math.Round fonksiyonuna sahipsiniz.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
Değer olarak ne olacak ? Daha fazla parametreye ihtiyacınız var.
Bunu arıyordum, ancak örneğim 4,2769 gibi bir sayı alıp sadece 4,3 olarak bir aralıkta düşürmekti. Tam olarak aynı değil, ancak bu yardımcı olursa:
Model.Statistics.AverageReview <= it's just a double from the model
Sonra:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
vb...
Kullanım Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Sonuç verecek:
var roundedVal = 3
Kayan nokta sayıları yerine tamsayılarla çalışıyorsanız, işte yol.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
İşte hem "numr" ve "DENR" işaretsiz tam sayılardır.
Math.Round(number)
En yakın tam sayıya yuvarlama kullanarak .
Kendi yuvarlak yönteminizi yazın. Gibi bir şey,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end