Správičky 2 277 Blogy 579 Fórum 14 090

Prehľad diskusie

photo
String to Decimal
Siro
10. 3. 2010 20:34:43
photo
RE: String to Decimal
duracellko
10. 3. 2010 22:01:14
photo
RE: String to Decimal
duracellko
10. 3. 2010 22:23:54
photo
RE: String to Decimal
Siro
10. 3. 2010 22:30:31
photo
RE: String to Decimal
T
11. 3. 2010 0:03:45
photo
RE: String to Decimal
T
11. 3. 2010 0:06:15
photo
RE: String to Decimal
vlko
11. 3. 2010 9:56:28
photo
RE: String to Decimal
T
11. 3. 2010 13:02:12
photo
RE: String to Decimal
duracellko
11. 3. 2010 13:54:50
photo
RE: String to Decimal
Siro
11. 3. 2010 13:56:39
photo
RE: String to Decimal
vlko
11. 3. 2010 14:07:01
photo
RE: String to Decimal
duracellko
11. 3. 2010 14:48:05
photo
RE: String to Decimal
vlko
11. 3. 2010 14:54:15
photo
RE: String to Decimal
Siro
11. 3. 2010 15:03:08
photo
RE: String to Decimal
Looser
11. 3. 2010 15:03:59
photo
RE: String to Decimal
Siro
11. 3. 2010 16:06:39
photo
RE: String to Decimal
T
11. 3. 2010 16:07:09

String to Decimal

photo
Siro
10. 3. 2010 20:34:43
Body: 5205
Najaktívnejší č.: 6

String to Decimal

Chlapi je možné prekonvertovať string do decimalu? Mám problém, niekedy to ide s čiarkou a niekedy s bodkou.. Hľadal som aj na internete, ale asi som zle hľadal.
Môžete mi hodiť funkciu, ktorá urobí so stringu decimal bez rozdielu či je tam bodka alebo čiarka?

Ď.

Š#iro

[Reakcia]

photo
duracellko
10. 3. 2010 22:01:14
Body: 4745
Najaktívnejší č.: 7

RE: String to Decimal

predpokladam, ze teda tam nie su oddelovace tisicov. Potom by toto malo fungovat:
Decimal.Parse(s.Replace(',', '.'), CultureInfo.InvariantCulture)

[Reakcia]

photo
duracellko
10. 3. 2010 22:23:54
Body: 4745
Najaktívnejší č.: 7

RE: String to Decimal

neverim tomu, ale podarilo sa mi znasilnit NumberFormatInfo, aby bral aj ciarku aj bodku :)

var nf = (NumberFormatInfo)NumberFormatInfo.InvariantInfo.Clone();
nf.NumberGroupSeparator
= String.Empty;
nf.CurrencyGroupSeparator
= String.Empty;
nf.CurrencyDecimalSeparator
= ",";
nf.CurrencySymbol
= String.Empty;

decimal d = decimal.Parse("45678.321", NumberStyles.Currency, nf);
Console.WriteLine(d.ToString(
"c", nf));
Console.WriteLine(d.ToString(
"n", nf));
Console.ReadLine();
dolezite je pri Parse urcite NumberStyles.Currency. Asi to funguje tak, ze najprv sa snazi parsovat ako Currency format, a ked sa to nepodari, tak pouzije ciselny format.

[Reakcia]

photo
Siro
10. 3. 2010 22:30:31
Body: 5205
Najaktívnejší č.: 6

RE: String to Decimal

Duracellko ide to, bohes - ale som si istý na 100% že som to skúšal aj takto, teraz neviem či som hŕrbŕrr riešil situáciu alebo som fetoval v ten deň. Ďakujem

Š#iro

[Reakcia]

photo
T
11. 3. 2010 0:03:45
Body: 16750
Najaktívnejší č.: 2

RE: String to Decimal

chvilu som rozmyslal(akademicka minutka), ci sa to da obsluzit aj dostojne (inak ako ten prvy duracellkou pristup:-)
static void Main(string[] args)
{
string d1 = "10.123", d2= "10,123";

//detected culture or default web culture
Thread.CurrentThread.CurrentCulture = new CultureInfo("sk-Sk");

Console.WriteLine(
"{0} {1}",
Parse(d1),
Parse(d2));

//10,123 10,123
Console.ReadKey();

//TODO:
//Make rule configurable = OOP and DI
}


//Do we have some rule? Sure we do! e.g.
private static Decimal Parse(string value)
{
decimal toRet;
return
//use current culture
Decimal.TryParse(value, out toRet)
? toRet
//or try invariant ...alternatively en-Gb
: Decimal.Parse(value, CultureInfo.InvariantCulture);
}

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
T
11. 3. 2010 0:06:15
Body: 16750
Najaktívnejší č.: 2

RE: String to Decimal

@duracellko: ufff, vyznelo to slizky, ale nebolo to tak myslene, hentak(replace) som to robil aj ja :-)

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
vlko
11. 3. 2010 9:56:28
Body: 35165
Najaktívnejší č.: 1

RE: String to Decimal

obe riesenia maju jednu chybu, nerataju s jazykmi, ktore pouzivaju ciarku ako oddelovac tisicov a tu uz je hold problem. Tazko navrhnut riesenie, ak ide o ulozene data, tak ich ukladat s invariant culture, ak ide o user data, tak treba zistit user locale a parsovat to cez nu.

[Reakcia]

photo
T
11. 3. 2010 13:02:12
Body: 16750
Najaktívnejší č.: 2

RE: String to Decimal

@vlko:

"ak ide o user data, tak treba zistit user locale a parsovat to cez nu"
to je iny case ako sa tu riesi a vobec to nie je problem. Staci detekovat culture a mat standardny Parse.

case:
.mam usera ktory pouziva konkretnu culture ale chcem mu umoznit zadat cislo vo viacerych formatoch (bud to interpretujem tak, ze potrebujem dodefinovat viacero decimal sepatrator charov, co je z hladiska API problem alebo tak, ze nadefinujem poradie kultur, podla ktoreho sa pokusim parsovat)

co sa tyka oddelovacov:
oddelovac tisicov nepovolis, ci uz cez client side inputu (validator), alebo ako specifikum daneho parse, povolis len desatinny oddelovac, ked uz ide o toto. To je riesenie tej dilemy zo zaciatku Tvojho prispevku.


Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
duracellko
11. 3. 2010 13:54:50
Body: 4745
Najaktívnejší č.: 7

RE: String to Decimal

@vlko.. predpokladal som, ze ciarka ako oddelovac tisicov nie je povoleny. ak by bol, tak nie je jasne ci "1,024" je tisic dvadstatstyri alebo jedna cela nula dvadsatstyri. neviem na co to siro potreboval. prve, co ma napadlo, ze cita nieco zo suboru, kde je povoleny oddelovac aj ciarka aj bodka.

teraz ma napadlo, ze napriklad internet banking TB akceptuje aj desatinnu bodku aj ciarku, ale ako oddelovac tisicov len medzeru. je pravda, ze s tymto mojim pristupom by sa toto neparsovalo spravne, lebo ja nepovolujem v druhom pripade ziaden oddelovac.

[Reakcia]

photo
Siro
11. 3. 2010 13:56:39
Body: 5205
Najaktívnejší č.: 6

RE: String to Decimal

Nie ja nepotrebujem rozoznávať tisíce cez čiarku, jednalo sa mi o klasické desatinné čísla ktoré poznáme u nás na slovensku. Komplikovanejšie to nebolo treba. Ďakujem všetkým zúčastnením za odpovede.

Š#iro

[Reakcia]

photo
vlko
11. 3. 2010 14:07:01
Body: 35165
Najaktívnejší č.: 1

RE: String to Decimal

to duracellko: ak sa bavime len o slovensku, tak s oddelovacov tisicov problem nemas, maximalne budes mat pri cislach vacsich ako 9999 medzeru medzi tisicami. Ak ale hovorime o rieseni, ktore riesi problem komplexne (teda lubovolnu jazykovu mutaciu), potom na taketo oddelovace bezne narazis. A z pohladu zakaznika, je vzdy neprijemne, ak tu pride zakaznik zo spanielska alebo holandska a jeho locale nastavenie ma za delimiter tisicov v prvom pripade bodku a v druhom pripade ciarku a naraz namiesto objednavky 10,000 kusov mas v systeme 10:)

to T: jo mozno zachadzam moc do detailov, ale kto ako prave mi so specialnym comma delimiterom by sme na to mali mysliet?:) Mozno keby siro presne definoval co chce, teda jeho use case.

[Reakcia]

photo
duracellko
11. 3. 2010 14:48:05
Body: 4745
Najaktívnejší č.: 7

RE: String to Decimal

@vlko.. no prave preto sa vzdy snazim pouzivat funkcie na formatovanie a parsovanie, ktore beru do uvahy uzivatelsku culture. Ale poziadavka, ze cislo moze mat desatinnu ciarku alebo bodku, toto vylucuje. Nikde na svete neexistuje "zvyklost", kde je mozne pouzit oboje. A hlavne to vylucuje pouzitie ciarky ako oddelovaca tisicov.
Teda predpokladam, ze to bola Sirova poziadavka, aby uzivatel mohol zadat cislo s bodkou alebo ciarkou, bez ohladu na jeho zvyklost. A teda nemoze pouzit bodku ani ciarku ako oddelovac tisicov.

[Reakcia]

photo
vlko
11. 3. 2010 14:54:15
Body: 35165
Najaktívnejší č.: 1

RE: String to Decimal

to ma privadza k myslienke: siro, co za paskvil to zasa robis?:)

[Reakcia]

photo
Siro
11. 3. 2010 15:03:08
Body: 5205
Najaktívnejší č.: 6

RE: String to Decimal

Chlopi vy komplikujete situáciu.. Nerobím nič medzinárodné, všetko len pre naše malé Slovensko. Problém som mal pri internetovom obchode (pri viacerých :-D), že pri zadaní sumy s desatinnou čiarkou  alebo s bodkou mi server nechcel prekonvertovať korektne string do decimalu. Problém je vyriešený, ĎAKUJEM.

Š#iro

[Reakcia]

photo
Looser
11. 3. 2010 15:03:59
Body: 1695
Najaktívnejší č.: 17

RE: String to Decimal

aky paskvil,
siro robi same suprish pupish vecicky

100011010011001100110210 ...(2?)

[Reakcia]

photo
Siro
11. 3. 2010 16:06:39
Body: 5205
Najaktívnejší č.: 6

RE: String to Decimal

Chlapci srandičky srandičky. Robiť treba! :-D

Čo znamená "paškvil"?

Š#iro

[Reakcia]

photo
T
11. 3. 2010 16:07:09
Body: 16750
Najaktívnejší č.: 2

RE: String to Decimal

@vlko: hore mas riesenie. Ak predpokladam, ze user moze zadat v ramci konkretnej culture dva desatinne odelovace...musim zabezpecit, tak cez validaciu ako i parse, aby nedochadzalo ku konfliktrom...ak bude chciet zadavat aj odelovace tisicov sucasne a je tam mozny knoflikt, tak mu o tom poviem a vyhovorim mu to resp. navhnem aspon zobrazenie warningu userovi

cize regexp validator +
private static Decimal Parse(string value)
{
 
decimal toRet;
 
return
    Decimal.TryParse(value, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture,
out toRet)
   
? toRet
    : Decimal.Parse(value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
}

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]



Najaktívnejší užívatelia
1. 35165 b. photo vlko
2. 16750 b. photo T
3. 15610 b. photo spigi
4. 6655 b. photo dudok
5. 5705 b. photo slavof
6. 5205 b. photo siro
7. 4745 b. photo duracellko
8. 3800 b. photo Liero
9. 3690 b. photo lubolacko
10. 3625 b. photo jakub