Math.Round - zaokraglanie

0
return Math.Round(double, 7);

jak zrobic zeby zawsze wypisywal 7 cyfr po przecinku nawet jesli ostatnia jest zero, teraz zamiast 5,3253500 wypisuje mi 5,32535
mimo podania ze chce 7 cyfr po przecinku.

1

żeby "wypisać" liczbę to musisz ją zamienić na string. Więc logiczne jest, że takie coś jak wyświetlanie nieznaczących zer należy szukać właśnie w formatowaniu a nie w zaokrąglaniu.

0

Nie za bardzo wiem o co chodzi i jak

string text = funkcja(Convert.ToDouble(string1), Convert.ToDouble(string2)).ToString();

Tak wyglada moje wypisywanie. Do funkcji musze wprowadzic dwa parametry typu double dlageto convertuje stringa ktory jest liczba na double. Funkcja zwraca double ktorego znow konwertuje na stringa i wypisuje

2
string text = funkcja(Convert.ToDouble(string1), Convert.ToDouble(string2)).ToString();

Hmm? W ten sposób konwertujesz double do stringa, ale nie ustalasz jej żadnego formatu.

Tak się formatuje stringa z odpowiednią liczbą znaków po przecinku:

String.Format("{0:0.0000000}", 0.12345678)

Na przykład:

Console.WriteLine(String.Format("{0:0.0000000}", 0.12345678));
0

Ale ja liczbe znakow po przecinku okreslam na wyjsciu mojej funkcji

 return Math.Round(double, 7);

Teraz chce zeby byla stala zawsze 7 nie obcinalo zer na koncu

0
Bodzio89 napisał(a):

Ale ja liczbe znakow po przecinku okreslam na wyjsciu mojej funkcji

 return Math.Round(double, 7);

Teraz chce zeby byla stala zawsze 7 nie obcinalo zer na koncu

nie rozumiesz co się do Ciebie pisze :|
ta funkcja musi zwracać stringa

0

Aha, wiec jak zamienic to

 return Math.Round(double, 7);

na zwracanie strigna z zawsze 7 cyframi po przecinku

0

Teraz chce zeby byla stala zawsze 7 nie obcinalo zer na koncu

Ech... Przecież procesor tak czy siak sam automatycznie te zera obetnie, tak działa przecie system dziesiętny (jeżeli będziesz to trzymał jako liczbę ofc.).
Słuchaj, co się do Ciebie mówi...

0
return Math.Round(d, 7);

Nie rozumiesz chyba...

Zakładając że zmienna d == 0.123456789, Math.Round(0.123456789) == 0.1234568.
A jeśli zmienna d == 0.1234, Math.Round(0.1234) == 0.1234.

Jak pewnie wiesz (mam nadzieję), 0.1234 == 0.1234000 == 0.12340000000000000000000000000. To są te same liczby. Jeszcze raz, liczby.

I teraz jeśli masz liczbę 0.1234 która jest równa (identyczna do) 0.1234000 która jest równa (identyczna do) 0.123400000000000000000000000000(0), i chcesz ją wyświetlić (tzn. zamienić na string), musisz powiedzieć komputerowi że ma te nieistniejące zera dodać przy wypisywaniu...

Na przykład

String.Format("{0:0.0000000}", 0.12345678)

albo

d.ToString("{0:0.0000000}")

Jeśli dalej nie rozumiesz to się poddaje.

0
 return Math.Round(double, 7).ToString();

No to jak nie da sie tego jakos wymusic? Zeby nie obcinal tych zer w stringu?

0

OK, rozumiem.

0
 return Math.Round(double, 7).ToString(".0000000");

OK dziala, dzieki wszystkim za pomoc :)

1

@Bodzio89

double x = 1.00000000;
double y = Math.Round(1.00000000, 3);

No i teraz pytanie, czy x i y różnią się czymkolwiek od siebie? NIE! Nie rozumiesz tego? Że to Math.Round jest tu zbędne? Że nic nie zmienia? Jeśli nie to może odpuść sobie programowanie i idź pograj w piłkę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1