Chastia® | Portals - chastia.eu - prevody.sk - aspnet.sk - termoklima.sk - Partners - Quantasoft - QSH.sk - Free Web Hosting
 
WUG.sk udalosti
WebSlice - FórumDiskusné fórum
Vyhľadávanie
Skip Navigation LinksAspNet.sk > F�rum > .NET > .NET Framework

Diskusné fórum

Autor Téma
Siro
10. 3. 2010 20:34:43
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

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

Bookmark and Share [Reakcia]
duracellko
10. 3. 2010 22:01:14
Príspevkov: 429
Článkov: 5
Blogy: 26
Správičiek: 15
Body: 4045

Najaktívnejší č.: 4
RE: String to Decimal
predpokladam, ze teda tam nie su oddelovace tisicov. Potom by toto malo fungovat:
Decimal.Parse(s.Replace(',', '.'), CultureInfo.InvariantCulture)

Bookmark and Share [Reakcia]
duracellko
10. 3. 2010 22:23:54
Príspevkov: 429
Článkov: 5
Blogy: 26
Správičiek: 15
Body: 4045

Najaktívnejší č.: 4
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.

Bookmark and Share [Reakcia]
Siro
10. 3. 2010 22:30:31
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

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

Bookmark and Share [Reakcia]
T
11. 3. 2010 0:03:45
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]
T
11. 3. 2010 0:06:15
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]
vlko
11. 3. 2010 9:56:28
Príspevkov: 1373
Článkov: 0
Blogy: 0
Správičiek: 1087
Body: 28605

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.

Bookmark and Share [Reakcia]
T
11. 3. 2010 13:02:12
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]
duracellko
11. 3. 2010 13:54:50
Príspevkov: 429
Článkov: 5
Blogy: 26
Správičiek: 15
Body: 4045

Najaktívnejší č.: 4
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.

Bookmark and Share [Reakcia]
Siro
11. 3. 2010 13:56:39
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

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

Bookmark and Share [Reakcia]
vlko
11. 3. 2010 14:07:01
Príspevkov: 1373
Článkov: 0
Blogy: 0
Správičiek: 1087
Body: 28605

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.

Bookmark and Share [Reakcia]
duracellko
11. 3. 2010 14:48:05
Príspevkov: 429
Článkov: 5
Blogy: 26
Správičiek: 15
Body: 4045

Najaktívnejší č.: 4
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.

Bookmark and Share [Reakcia]
vlko
11. 3. 2010 14:54:15
Príspevkov: 1373
Článkov: 0
Blogy: 0
Správičiek: 1087
Body: 28605

Najaktívnejší č.: 1
RE: String to Decimal
to ma privadza k myslienke: siro, co za paskvil to zasa robis?:)

Bookmark and Share [Reakcia]
Siro
11. 3. 2010 15:03:08
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

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

Bookmark and Share [Reakcia]
Looser
11. 3. 2010 15:03:59
Príspevkov: 244
Článkov: 0
Blogy: 0
Správičiek: 6
Body: 1340

Najaktívnejší č.: 14
RE: String to Decimal
aky paskvil,
siro robi same suprish pupish vecicky

100011010011001100110210 ...(2?)

Bookmark and Share [Reakcia]
Siro
11. 3. 2010 16:06:39
Príspevkov: 416
Článkov: 0
Blogy: 18
Správičiek: 24
Body: 3460

Najaktívnejší č.: 6
RE: String to Decimal
Chlapci srandičky srandičky. Robiť treba! :-D

Čo znamená "paškvil"?

Š#iro

Bookmark and Share [Reakcia]
T
11. 3. 2010 16:07:09
Príspevkov: 1654
Článkov: 0
Blogy: 42
Správičiek: 162
Body: 13610

Najaktívnejší č.: 3
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

Bookmark and Share [Reakcia]


Zdroje
Bloggeri OPML Bloggeri
RSS 100 SpigiBlog
RSS 3 EX©M
RSS 1 singh
WUG.sk články
WUG.sk
Najaktívnejší...
28605 b. 1. vlko
14160 b. 2. spigi
13610 b. 3. T
4045 b. 4. duracellko
3845 b. 5. slavof
3460 b. 6. siro
3295 b. 7. skippo
3275 b. 8. jakub
2595 b. 9. dudok
2145 b. 10. ex
Ocenenie

MVP Profil - Igor Stanek
Čo je to MVP?
Partneri portálu
Reklama
Spriatelené weby
Copyright © 2002 - 2009 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.
RSS - anotácia, RSS - Blogy