siedzę nad c# zdobywając tytuł 'master of strings’ bo muszę pisać coś w stylu dziwnego parsera. nauczyłem się regexpów, i dziwnych wynalzków do konwertowania.
i tak a propos stringów
tutaj jest jeszcze kilka fajnych od bartosza:
http://stackoverflow.com/questions/84556/whats-your-favorite-programmer-cartoon
a teraz mała dziwnostka:
oczywiście dotarłem do kłamstwa, nad którym musiałem się sporo nabiedzić. funkcji konwertujących jest w pytkę ale oczywiście jak się ma konkretny pomysł to nic nie działa jak powinno. ot taki świetny link pokazujący potęgę konwersji. jest tam taki opisik:
”
Every object has a method called ToString that returns a string representation of the object. The ToString method can accept a string parameter, which tells the object how to format itself – in the String.Format call, the formatting string is passed after the position, for example, “{0:##}”
”
no i qpa. problem: skonwertować liczbę zmiennoprzecinkową tak, aby była wyrównana do prawej, z dokładnością do dwóch znaków po przecinq w zapisie amerykańskim [’.’ oddziela część dziesiętną]. no więc można byłoby tak:
float flt=-1234,289F;
string out= flt.ToString("{0,15:0.00}");
co oczywiście nie zadziałało. taka konwersja działa w ogóle bardzo dziwnie – wszystkie znaczki { , : etc – traktowane są jak część liczby i wychodzi z tego:
-{1 2315:4,29}
a więc trochę jakby nie to. ponieważ występuje w zdaniu 'formatuje sam siebię’ a więc można pominąć {0} bo wiadomo, że to o niego chodzi. Ciekawie traktowany jest minus – zupełnie jakby liczba składała się z liczby i z minusa:
string out=flt.ToString(" 0.00");
co powinno pokazać liczbę przesuniętą o klika spacji w prawo. wynik:
- 1234,29
wygląda na to, że ToString z przeciążenia na liczbie nie przyjmuje parametrów formatowania. finalnie trzeba było skomplikować:
string out=string.Format("{0,15}",flt.ToString("0.00",new System.Globalization.ClutureInfo("en-US")));
ufff.. niuanse językowe…