|
|
AspNet.sk > F�rum > .NET > .NET Framework
Diskusné fórum
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
|
[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)
|
[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.
|
[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
|
[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
|
[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
|
[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.
|
[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
|
[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.
|
[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
|
[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.
|
[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.
|
[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?:)
|
[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
|
[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?)
|
[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
|
[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
|
[Reakcia]
|
|
|
|
|
|
|
|
|
|
Ak nie ste zaregistrovaný, prosím registrujte sa tu! |
|
|
|
Predmet: |
|
|
Text: |
Zdrojové / programové kódy vkladajte pomocou príkazu ! Takto vložený kód bude naformátovaný.
Kód je možné vložiť aj pomocou dvojice značiek [C#]Váš kód[/C#].
Namiesto C# je možné použiť následujúce značky: Assembly, Batch, C#, CSS, HTML, INI, Java, JScript, Lua, MSIL, Pascal, Perl, PHP, PowerShell, Python, SQL, VB.NET, VBScript, XAML, XML.
|
|
|
|
|
|
|