Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...
 Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade
 Probleme accesare nr test telefon

Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...
 Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik
 

Number format

- - - - -
  • This topic is locked This topic is locked
42 replies to this topic

#1
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007
Salut!

Nu este intrebare chiar de java, dar poate ma puteti ajuta.
Vreau sa scriu o functie/metoda rapida care sa parseze un string si sa il transforme intr-un int.
Pana acum eu stiu 2 variante: sa iau fiecare caracter din string si sa vad daca e numar etc, sau sa folosesc un number formatter cu Locase, pentru ca si 1.234,00 dar si 1,234.00 sunt intregi, doar ca metoda asta este slow, si mai trebuie sa folosesti si try/catch.

Intrebarea mea este: unde gasesc o lista completa per country/region a formaturilor de numere si date, ca sa pot sa rescriu roata?

Merci mult!

#2
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007
*Locale, nu Locase

#3
afh

afh

    Active Member

  • Grup: Members
  • Posts: 1,836
  • Înscris: 14.04.2005
Nu mă pricep, dar ce vrei tu să faci seamănă cu un Scanner - https://docs.oracle....il/Scanner.html

#4
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
Cum vei face diferenta intre 1.251 si 1,251? Ambele pot fi si mii si zecimale, depinde de limba. Daca te legi de cea a sistemului iar nu-i bine, pentru ca poti avea documente scrise in alt format.
Pare destul de greu de generalizat.

#5
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007

View Postsorin147, on 07 septembrie 2018 - 13:54, said:

Cum vei face diferenta intre 1.251 si 1,251? Ambele pot fi si mii si zecimale, depinde de limba. Daca te legi de cea a sistemului iar nu-i bine, pentru ca poti avea documente scrise in alt format.
Pare destul de greu de generalizat.
Nu am zis ca vreau sa generalizez. O sa primesc un String si un Locale. In functie de astea 2 o sa fac parsarea. Dar nu vreau sa folosesc NumberFormat, si nu vreau sa arunc nicio NumberFormatException.

#6
sorin147

sorin147

    Senior Member

  • Grup: Senior Members
  • Posts: 6,368
  • Înscris: 11.08.2003
De ce nu vrei sa arunci sau sa prinzi? Daca in fisier ai numere, numere, numere si intr-o celula ai "ana are mere"? Nu vrei sa te asiguri ca nu-ti crapa? :)

#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
http://userguide.icu...org/formatparse are tot felul de reguli, disponibil ca API si pentru Java.

View Postpiramyd, on 07 septembrie 2018 - 10:24, said:

metoda asta este slow, si mai trebuie sa folosesti si try/catch.

Ce intelegi prin slow?

#8
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007

View Postsorin147, on 07 septembrie 2018 - 16:30, said:

De ce nu vrei sa arunci sau sa prinzi? Daca in fisier ai numere, numere, numere si intr-o celula ai "ana are mere"? Nu vrei sa te asiguri ca nu-ti crapa? Posted Image
Nu vreau sa fiu nevoit sa prind, si nici sa arunc. Ma asigur ca nu imi crapa in metoda pe care o scriu.
Un exemplu ar fi sa mai am un parametru 'defaultValue' de tip int, pe care sa il intorc daca nu este integer. Dar fara throw/try/catch.

View Postdani.user, on 07 septembrie 2018 - 17:45, said:

http://userguide.icu...org/formatparse are tot felul de reguli, disponibil ca API si pentru Java.



Ce intelegi prin slow?
Merci, o sa ma uit zilele astea. Slow inseamna ca face tot felul de operatii si incarcari pentru o simpla parsare, si mai si foloseste throw/try/catch, ceea ce ingreuneaza rau codul.
Am comparat metoda de a parsa cu number formatter din java, si o metoda de-a mea care doar parsa un intreg, si e cam de 100 de ori mai slow cea din java. Asta daca nu arunca exceptie de parsare.

Ideal ar fi sa stiu daca/unde se foloseste virgula, punct etc in functie de Locale, si sa parcurg o singura data string-ul, iar la final sa il fac int, sau nu. That's it.

#9
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postpiramyd, on 07 septembrie 2018 - 17:56, said:

Nu vreau sa fiu nevoit sa prind, si nici sa arunc. Ma asigur ca nu imi crapa in metoda pe care o scriu.
Un exemplu ar fi sa mai am un parametru 'defaultValue' de tip int, pe care sa il intorc daca nu este integer. Dar fara throw/try/catch.


Merci, o sa ma uit zilele astea. Slow inseamna ca face tot felul de operatii si incarcari pentru o simpla parsare, si mai si foloseste throw/try/catch, ceea ce ingreuneaza rau codul.
Am comparat metoda de a parsa cu number formatter din java, si o metoda de-a mea care doar parsa un intreg, si e cam de 100 de ori mai slow cea din java. Asta daca nu arunca exceptie de parsare.

Ideal ar fi sa stiu daca/unde se foloseste virgula, punct etc in functie de Locale, si sa parcurg o singura data string-ul, iar la final sa il fac int, sau nu. That's it.
Scrie-ti propria functie. La naiba, in cazurile simple e vorba doar de doua caractere in plus: punct sau virgula. In functie de unde apar in string si cate cifre sunt dupa, decizi daca separa miile sau zecimalele. Daca dupa apar doar doua cifre sau mai mult de 3, e sigur cu virgula.

try/catch nu e o problema daca parsezi cateva numere. E problema doar daca parsezi informatii tabelare cu zeci de mii de intrari sau mai mult.

#10
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Partea de performanta, daca nu ai cerinte stricte nu ar trebui sa te deranjeze

#11
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View Postpiramyd, on 07 septembrie 2018 - 16:26, said:

Nu am zis ca vreau sa generalizez. O sa primesc un String si un Locale. In functie de astea 2 o sa fac parsarea. Dar nu vreau sa folosesc NumberFormat, si nu vreau sa arunc nicio NumberFormatException.
tu nu esti programator, NEXT

#12
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018
Se foloseste Scanner cu useLocale. De aruncat tot o sa arunce InputMismatchException daca nu-i ok inputul, dar aproape tot API-ul oficial arunca ceva(bine, la scanner, treaba ar putea fi mitigata cu verificare gen hasNextDouble sau hasNextInt). Altceva iti faci tu.

Edited by Libertarian, 19 September 2018 - 13:17.


#13
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View PostLibertarian, on 19 septembrie 2018 - 13:15, said:

Se foloseste Scanner cu useLocale. De aruncat tot o sa arunce InputMismatchException daca nu-i ok inputul, dar aproape tot API-ul oficial arunca ceva(bine, la scanner, treaba ar putea fi mitigata cu verificare gen hasNextDouble sau hasNextInt). Altceva iti faci tu.
Si daca seful tau ti-ar spune sa faci o astfel de functie fara a folosi alte API-uri ci doar capul tau si primitivele, cum ai face aceasta functie ?

#14
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007

View Postromio79, on 18 septembrie 2018 - 00:40, said:

Partea de performanta, daca nu ai cerinte stricte nu ar trebui sa te deranjeze
Pai am cerinte stricte. Speed.
Si nu prea vreau sa folosesc exceptii, pentru ca:
http://java-performa...a-is-very-slow/
https://shipilev.net...al-performance/

View PostCrocodiluMereuVesel, on 18 septembrie 2018 - 10:01, said:

tu nu esti programator, NEXT
Vai, multumesc de lamurire. Nu m-am gandit la asta, dar acum ca ai scris tu aici, ma ajuti de 2 ori. O data cu problema mea, o data cu critici "constructive". Esti un baiat de zahar. Te p**i pe el si-i gata ceaiul.

Alt motiv pentru care nu vreau sa folosesc NumberFormat:
https://www.ibm.com/...rmat/index.html

Oricum, am cam gasit ce cautam:
http://www.localepla...icu/iso639.html

#15
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
"Speed" nu e o cerinta. Sa fie capabil sa efectueze 1 milion de transformari intr-o secunda pe un core ce ruleaza la 1 GHz e o cerinta. Asadar, care e cerinta adevarata si cat de lent s-a dovedit codul ce arunca exceptii incat nu a trecut baremul? Cand performanta e critica, conteaza foarte mult si datele de intrare si ce informatii/estimari ai despre ele, de exemplu cat % te atepti sa fie valide.

Cand vine vorba de reguli de parsare pentru o multime de culturi, am recomandat biblioteca de mai sus cu un motiv: nu doar ca au stat ei sa colecteze toate acele reguli si sa le implementeze, dar e o biblioteca destul de populara si deci sunt multi care o folosesc => sunt sanse mai mari ca daca ceva e implementat gresit sa observe cineva.

#16
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018

View PostCrocodiluMereuVesel, on 20 septembrie 2018 - 16:58, said:

Si daca seful tau ti-ar spune sa faci o astfel de functie fara a folosi alte API-uri ci doar capul tau si primitivele, cum ai face aceasta functie ?
Asta nu se face la plesneala, trebuie cerinte detaliate. E nevoie de separator de grupuri de 3 cifre? Este ok ca acest separator sa fie utilizat si aiurea precum 1.22.3.444, 5 sau trebuie neaparat sa respecte regula de cate trei grupuri catre dreapta iar primul din stanga 1-3, gen 1.223.444,5? Ce se intampla daca numarul parsat e mai mare decat valoarea maxima tipul de date in care se face conversia? E posibil ca stringul sa cotina si alte caractere la inceput sau sfarsit(cum ar fi indicator de moneda)? Eh, in functie de raspunsurile la aceste intrebari, abordarile sunt diferite, dupa cum vor fi si performantele diferite... in general nu e bine sa reinventezi roata, vezi ce e prin commons math, guava si alte frameworkuri populare...

View Postpiramyd, on 21 septembrie 2018 - 08:08, said:

Oricum, am cam gasit ce cautam:
http://www.localepla...icu/iso639.html
Adica ai gasit ce aveai oricum in java. Bun asa.

Edited by Libertarian, 21 September 2018 - 12:43.


#17
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007

View Postdani.user, on 21 septembrie 2018 - 09:27, said:

"Speed" nu e o cerinta. Sa fie capabil sa efectueze 1 milion de transformari intr-o secunda pe un core ce ruleaza la 1 GHz e o cerinta. Asadar, care e cerinta adevarata si cat de lent s-a dovedit codul ce arunca exceptii incat nu a trecut baremul? Cand performanta e critica, conteaza foarte mult si datele de intrare si ce informatii/estimari ai despre ele, de exemplu cat % te atepti sa fie valide.

Cand vine vorba de reguli de parsare pentru o multime de culturi, am recomandat biblioteca de mai sus cu un motiv: nu doar ca au stat ei sa colecteze toate acele reguli si sa le implementeze, dar e o biblioteca destul de populara si deci sunt multi care o folosesc => sunt sanse mai mari ca daca ceva e implementat gresit sa observe cineva.
Managerii cu care lucrez momentan habar n-au sa formuleze o cerinta sau sa faca un estimat de nevoi hardware de la an la an. Asa ca s-au trezit acum cu serverele supraincarcate.
Nu observasem ca si tu ai postat pagina ICU.

View PostLibertarian, on 21 septembrie 2018 - 12:41, said:


Asta nu se face la plesneala, trebuie cerinte detaliate. E nevoie de separator de grupuri de 3 cifre? Este ok ca acest separator sa fie utilizat si aiurea precum 1.22.3.444, 5 sau trebuie neaparat sa respecte regula de cate trei grupuri catre dreapta iar primul din stanga 1-3, gen 1.223.444,5? Ce se intampla daca numarul parsat e mai mare decat valoarea maxima tipul de date in care se face conversia? E posibil ca stringul sa cotina si alte caractere la inceput sau sfarsit(cum ar fi indicator de moneda)? Eh, in functie de raspunsurile la aceste intrebari, abordarile sunt diferite, dupa cum vor fi si performantele diferite... in general nu e bine sa reinventezi roata, vezi ce e prin commons math, guava si alte frameworkuri populare...


Adica ai gasit ce aveai oricum in java. Bun asa.
In java nu ai regulile clar scrise.

Merci de raspunsuri, eu sunt lamurit.

#18
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
As masura cat mai repede ce incarca serverele. Intuitia imi zice ca e foarte putin probabil sa fie de la parsari de numere.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate