2009-09-16 8 views
8

Chcę być liczbą całkowitą wielokrotnością 10,100,1000 i tak dalej ...Wielokrotności 10,100,1000 ... C#

Na przykład podwójnego val = 35 następnie chcę int 40
val = 357 następnie chcę int val = 400
val = 245567 potem chcę int val = 300000
val = 245,567.986 wtedy też chcę int = 300000

Czy jest coś w C#, który może pomóc w generowaniu te całkowitą

Podstawowa logika, o której mogę myśleć to: Extrac t pierwsza liczba całkowita, dodaj 1 do niego. Policz całkowitą liczbę cyfr i dodaj zera (totalno -1).

Czy istnieje lepszy sposób?

Chcę przypisać te wartości do osi wykresu. Próbuję dynamicznie tworzyć wartości etykiet osi na podstawie punktów danych wykresów.

+2

I Find Your akapit drugi jest wyjątkowo mylący. Czy możesz wyjaśnić jakieś? –

+1

Chcesz zaokrąglić? lub podnieść do sufitu najwyższą liczbę znaczącą (w rozumieniu 245 567 => 300 000)? Czy to prawda? –

+1

"Wyodrębnij pierwszą liczbę całkowitą, dodaj 1 do niej" - co z (powiedzmy) 400? 4 + 1 = 5, z zerami otrzymasz 500. –

Odpowiedz

28

ten powinien robić to, co chcesz, gdzie x jest wejściem:

 double scale = Math.Pow(10, (int)Math.Log10(x)); 
     int val = (int)(Math.Ceiling(x/scale) * scale); 

wyjście:

35   40 
357   400 
245567  300000 
245567.986 300000 

Jeśli chcesz, aby poradzić sobie z liczbami ujemnymi (zakładając, że chcesz zaokrąglić z dala od 0):

 double scale = (x == 0 ? 1.0 : Math.Pow(10, (int)Math.Log10(Math.Abs(x)))); 
     int val = (int)(Math.Ceiling(Math.Abs(x)/scale) * scale)* Math.Sign(x); 

Co daje:

-35   -40 
0   0 
35   40 
357   400 
245567  300000 
245567.986 300000 
+0

zbyt wolno :(-------------- –

+0

tak, to jest bardziej rozbudowane –

+1

Dobra odpowiedź: wygrywa matematyka –

0

Nie można podać konkretnej odpowiedzi na pytanie: c#, ale ogólnie rzecz biorąc to, czego szukasz, to log10, niezależnie od tego, jak się nazywa w c#. Jeśli chcesz operować na numerze.

Jeśli chodzi o wyjście, można rzeczywiście działają na ciąg, omijając/dostosowanie pierwszy numer itp

0

Powinno to do trick:

// val is the value 
var log = Math.Floor(Math.Log10(val)); 
var multiplier = Math.Pow(10, log); 

var result = Math.Ceiling(val/multiplier)*multiplier; 
2

Podejście to powinno działać zarówno pozytywnych wykluczające wartości x:

int log = (x == 0) ? 1 : (int)(Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(x))))); 
int result = (int)(((x < 0) ? Math.Floor(x/log) : Math.Ceiling(x/log)) * log); 
Powiązane problemy