Ĺadny brzuch
Jak przekonwertować liczbę typu float zapisaną tekstem? Gdy używam Float.parseFloat(String) to wyskakuje mi błąd ,gdy próbuję przekonw. liczbę "123,456".
przed konwersja zamien przecinek na kropke
przed konwersja zamien przecinek na kropke
Niby tak ale co jeśli będzie tego używał osoba z innej strefy językowej? I to takiej ,w której część całkowitą od dziesiętnej oddziela się czymś innym? Na przykład Anglicy używają przecinka w ten sposób "1,000,000.00". Jak tu zamienię przecinek w kropkę ,to też będzie niewesoło...
Poza tym Java bez problemu konwertuje Float->String z uwzględnieniem lokalnych zasad pisowni. Dlaczego miałaby nie robić tego w drugą stronę???
nie jestem programista javy, na pierwszy rzut oka to wydawalo sie problemem ale jesli jest inaczej to sry - i mnie nie pytaj czemu dzieje sie tak dziwnie.
Witam,
Może to nie jest dokładnie to o co chodzi, ale taka funkcja może się przydać:
public static float toFloat(String number) { float result = 0f; try { result = Float.parseFloat(number); return result; } catch (NumberFormatException e) { if (number.indexOf(',') > 0) { number = number.replace(',', '.'); } else if(number.indexOf('.') > 0) { number = number.replace('.', ','); } result = toFloat(number); } return result; }
Nie jest to najwydajniejsze rozwiązanie i prawie na pewno jest do tego specjalna funkcja :)
Sam w Javie programuje od niedawna, lecz staram się pomóc.
Pozdrawiam,
Sznurek
Użytkownik LinKer edytował ten post 15 czerwiec 2007, 17:23
Sam też próbowałem napisać coś podobnego. I stąd mam kolejne pytanie:
Czemu funkcja {String}.replace(char,char) gdy się jej poda jako pierwszy argument spację ,to nie dokonuje zamiany?
Hmm... [standardowa-odpowiedź-admina]U mnie działa :)[/standardowa-odpowiedź-admina]
Problem może tkwić w tym, że Stringu nie da się zmienić. Metoda replace tworzy nowego, zmienionego Stringa a starego zostawia w spokoju :)
Dla przykładu kod
public class Test { public static void main(String argc[]) { String cos = "www ekipa pl"; String wynik = cos.replace(" ", "."); System.out.println(cos); System.out.println(wynik); } }
Oraz wynik przy kompilacji:
www ekipa pl www.ekipa.pl
Chyba wyraziłem się jasno :) W razie problemów - pytaj dalej ;)
--EDIT--
Jak już poruszyłem to, że napisów w Javie nie da się zmienić to pociągnę ten temat dalej :)
Z powodu w/w powodu operacje na Stringach mogą być wyjątkowo wolne, np:
String a = ""; String b = "bbbbbbbbbbbbbbbbbbb"; for(int i = 0; i < 1000; i++) { a += b; } return a;
Co każdą iterację pętli tworzony jest nowy String na miejscu a, co powoduje większą zasobożerność i zwiększenie się czasu obliczeń.
Z pomocą przychodzi klasa StringBuffer znajdująca się w pakiecie java.lang:
StringBuffer a = new StringBuffer(); String b = "bbbbbbbbbbbbbbbbbbb"; for(int i = 0; i < 100; i++) { a.append(b); } return a.toString();
Polecam sprawdzić wydajność obu kodów u siebie na komputerze, choćby, przy większej liczbie iteracji, "na oko".
Różnica będzie zauważalna :)
Po więcej info zapraszam na: http://java.sun.com/...002/tt0305.html
Użytkownik LinKer edytował ten post 17 czerwiec 2007, 15:40
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
przed konwersja zamien przecinek na kropke
przed konwersja zamien przecinek na kropke
Niby tak ale co jeśli będzie tego używał osoba z innej strefy językowej? I to takiej ,w której część całkowitą od dziesiętnej oddziela się czymś innym? Na przykład Anglicy używają przecinka w ten sposób "1,000,000.00". Jak tu zamienię przecinek w kropkę ,to też będzie niewesoło...
Poza tym Java bez problemu konwertuje Float->String z uwzględnieniem lokalnych zasad pisowni. Dlaczego miałaby nie robić tego w drugą stronę???
nie jestem programista javy, na pierwszy rzut oka to wydawalo sie problemem ale jesli jest inaczej to sry - i mnie nie pytaj czemu dzieje sie tak dziwnie.
Witam,
Może to nie jest dokładnie to o co chodzi, ale taka funkcja może się przydać:
public static float toFloat(String number) { float result = 0f; try { result = Float.parseFloat(number); return result; } catch (NumberFormatException e) { if (number.indexOf(',') > 0) { number = number.replace(',', '.'); } else if(number.indexOf('.') > 0) { number = number.replace('.', ','); } result = toFloat(number); } return result; }
Nie jest to najwydajniejsze rozwiązanie i prawie na pewno jest do tego specjalna funkcja :)
Sam w Javie programuje od niedawna, lecz staram się pomóc.
Pozdrawiam,
Sznurek
Użytkownik LinKer edytował ten post 15 czerwiec 2007, 17:23
Sam też próbowałem napisać coś podobnego. I stąd mam kolejne pytanie:
Czemu funkcja {String}.replace(char,char) gdy się jej poda jako pierwszy argument spację ,to nie dokonuje zamiany?
Hmm... [standardowa-odpowiedź-admina]U mnie działa :)[/standardowa-odpowiedź-admina]
Problem może tkwić w tym, że Stringu nie da się zmienić. Metoda replace tworzy nowego, zmienionego Stringa a starego zostawia w spokoju :)
Dla przykładu kod
public class Test { public static void main(String argc[]) { String cos = "www ekipa pl"; String wynik = cos.replace(" ", "."); System.out.println(cos); System.out.println(wynik); } }
Oraz wynik przy kompilacji:
www ekipa pl www.ekipa.pl
Chyba wyraziłem się jasno :) W razie problemów - pytaj dalej ;)
--EDIT--
Jak już poruszyłem to, że napisów w Javie nie da się zmienić to pociągnę ten temat dalej :)
Z powodu w/w powodu operacje na Stringach mogą być wyjątkowo wolne, np:
String a = ""; String b = "bbbbbbbbbbbbbbbbbbb"; for(int i = 0; i < 1000; i++) { a += b; } return a;
Co każdą iterację pętli tworzony jest nowy String na miejscu a, co powoduje większą zasobożerność i zwiększenie się czasu obliczeń.
Z pomocą przychodzi klasa StringBuffer znajdująca się w pakiecie java.lang:
StringBuffer a = new StringBuffer(); String b = "bbbbbbbbbbbbbbbbbbb"; for(int i = 0; i < 100; i++) { a.append(b); } return a.toString();
Polecam sprawdzić wydajność obu kodów u siebie na komputerze, choćby, przy większej liczbie iteracji, "na oko".
Różnica będzie zauważalna :)
Po więcej info zapraszam na: http://java.sun.com/...002/tt0305.html
Użytkownik LinKer edytował ten post 17 czerwiec 2007, 15:40