C# SPECYFIKATORY FORMATU


Bardzo często będziesz miał „wizję” jak coś powinno być dokładnie wyświetlone i jakim miejscu. Korzystanie tutaj z łączonych string-ów za pomocą + np. Console.WriteLine(zmienna1 + „tekst” + zmienna2); w pewnych sytuacjach niebezpiecznie komplikuje cały kod programu, a z drugiej strony pewne sytuację wymagają użycia specyfikatora formatu, bo użycie łączonych string-ów wyklucza wyświetlenie czegoś tak jak chcemy. Z pomocą przychodzi nam wymieniony wcześniej specyfikator formatu. W dzisiejszej lekcji zajmiemy się niektórymi sposobami wyświetlania, oraz specyfikatorem formatu.

Aby kontrolować sposób w jaki będą kontrolowane dane numeryczne, będziesz musiał skorzystać z drugiej formy metody WriteLine();
Console.WriteLine(„łańcuch formatujący”,arg0,arg1,agr2…);


W tej wersji argumenty są oddzielone od siebie przecinkami, a nie znakami „+”. Łańcuch formatujący składa się z dwóch elementów, ze znaków składających się na tekst oraz z specyfikatorów formatu. Specyfikator formatu ma następującą formę:

{numer argumentu, szerokość : fmt}

Gdzie numer argumentu jest określony przez liczbę począwszy od zera, szerokość to minimalna wyświetlaną szerokość jaką posiada argument, fmt to format.

Prześledź poniższy przykład, aby prześledzić działanie, drugiej wersji metody WriteLine:

Początek kodu:
using System ;


class Pokaz
{
public static void Main()
{
int dni1 = 28, dni2 = 29;


Console.WriteLine(„Luty może posiadać {0,5} dni lub {1} dni.”, dni1, dni2);
}
}

Koniec kodu:

Program tam gdzie jest {0} wpisuje argument pierwszy po przecinku, tuż za łańcuchem formatującym czyli w tym przypadku wartość dni1, po przecinku jest podana długość minimalna, liczba 28 ma długość 2 bo zawiera 2 cyfry, to chyba zrozumiałe, więc przed liczbą 28 powinny być 3 wolne miejsca bo 5 – 2 analogicznie jest równe 3. Teraz użyjemy formatowanie prześledź sobie poniższy program, aby zobaczyć jak to działa.

Początek kodu:
using System ;


class Pokaz
{
public static void Main()
{
double w = 9456.84745 ;


Console.WriteLine(„Jakiś tekst {0:#.##}”,w);
}
}

Koniec kodu:

Jako format wybieramy tutaj #.## oznacza to że po przecinku chcemy dokładnie 2 liczby, wynik jest zaokrąglony co powinien was ucieszyć, jednak uważajcie bo w zmiennych tylu double i float występuje często błąd w zaokrągleniach, dlatego jeżeli to są obliczenia tylu walutowego to radzę korzystać z typu decimal który został specjalnie do tego stworzony. Nie daliśmy w tym przykładzie minimalnej szerokości argumentu, przypominam, że nie jest to konieczne, a w tym przykładzie nawet to jest nie wskazane. Minimalnej szerokości argumentu używa się jednak bardzo rzadko, chociaż czasami ze względów estetycznych, bardzo się to przydaje. W poniższym przykładzie zaprezentuję ci co jeszcze można zrobić z formatem.
Początek kodu:


using System ;


class Pokaz
{
public static void Main()
{
double w = 12.4657;


Console.WriteLine(„Za towar zapłaciliśmy {0:C}, jak dla mnie to tanio”,w);
}
}

Koniec kodu:

Tutaj użyliśmy formatu z :C to wyświetlenia znaku walutowego i zaokrąglenia liczby. Po niżej przedstawiam ci inne (nie wszystkie) formaty, po eksperymentuj sobie trochę z nimi, jako pracę domową nie dostaniesz konkretnego zadania, tylko powtórz sobie dokładnie co przerobiliśmy bo w najbliższej lekcji przechodzimy do class(klas).
Początek kodu:

using System ;

class Pokaz
{
public static void Main()
{
int i = 654321 ;


Console.WriteLine(„Specyfikator :C {0:C}”, i);
Console.WriteLine(„Specyfikator :C {0:D}”, i);
Console.WriteLine(„Specyfikator :C {0:E}”, i);
Console.WriteLine(„Specyfikator :C {0:F}”, i);
Console.WriteLine(„Specyfikator :C {0:G}”, i);
Console.WriteLine(„Specyfikator :C {0:N}”, i);
Console.WriteLine(„Specyfikator :C {0:X}”, i);
Console.WriteLine(„Specyfikator :C {0:x}”, i);


Console.WriteLine(„\nSpecyfikatory dokładności\n”);


//Z specyfikatorami dokładności
Console.WriteLine(„Specyfikator :C {0:C6}”, i);
Console.WriteLine(„Specyfikator :C {0:D6}”, i);
Console.WriteLine(„Specyfikator :C {0:E6}”, i);
Console.WriteLine(„Specyfikator :C {0:F6}”, i);
Console.WriteLine(„Specyfikator :C {0:G6}”, i);
Console.WriteLine(„Specyfikator :C {0:N6}”, i);
Console.WriteLine(„Specyfikator :C {0:X6}”, i);
Console.WriteLine(„Specyfikator :C {0:x6}”, i);
}
}

Koniec kodu:

Po eksperymentuj też sobie zamiast typu int, na przykład z typem double.