Toon posts:

[asp.net] String met komma omzetten naar getal

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een asp.net pagina die via een request.querystring een bedrag ophaalt.
Dit bedrag wil ik omzetten naar centen.

Het probleem is dat het bedrag soms met en soms zonder getallen achter de komma is dus:
100 of 100,5

Centen worden in de querystring gescheiden door een komma. Als ik de string met ToDouble omzet wordt het:
100,5 toDouble -> 10050 (dit moet ik dan x 10 doen)
maar als er geen centen zijn wordt het
100 --> 100 (dit moet dan x 100)

Als 100 100 blijft is het niet goed, dit zijn geen centen, maar als ik altijd het bedrag vermenigvuldig met 100 gaat het fout met getallen die wel centen hebben 100,5 wordt 10050 * 100 = 1005000.
Ik heb ook ToInt32 geprobeerd, kreeg ik hetzelfde probleem als bij todouble.

Waarschijnlijk is het probleem dat ik de datatypes in .net aan het misbruiken ben, maar
wat is nu (vb.net) de juiste methode om in asp.net een string (met komma) om te zetten in een getal?

nb. in classic asp deed ik gewoon:
code:
1
2
3
Dim prijs
prijs = request.querystring("prijs")
prijs = (prijs * 100)


ging altijd prima.

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Probeer eens Double.Parse en Double.TryParse (zie de begeleidende .NET SDK Documentation voor meer informatie).

If you can't beat them, try harder


Verwijderd

Kijk eens op:

http://msdn.microsoft.com...ertclasstodoubletopic.asp

Vergeet niet te controlleren of je de juiste culture hebt (getallen met een decimale "." (punt) ipv. een "," (komma)) Als je niet de juiste culture hebt ingesteld krijg je soms rare resultaten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:05
De Convert class heeft overloads.
Bv ToDouble, daar heb je een overload die een IFormatProvider neemt als argument. Die IFormatProvider kan je zelf maken; bv, je maakt een NumberFormatInfo object, en je specifieert dat de DecimalSeparator een komma is.

(Trouwens, geldbedragen moet je niet in een double opslaan, maar in een Decimal).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Oke bedankt allemaal, ik zat verkeerd te zoeken, ik moest ehm inderdaad leren dat de punt een separator was.

dit doet in ieder geval wat ik wil:
code:
1
2
3
4
5
6
7
Public Function ConvCents (prijsstr As String) As Decimal
        Dim ks as System.Globalization.NumberFormatInfo = New CultureInfo("en-US", False).NumberFormat
        ks.NumberDecimalSeparator = "."
        ks.NumberGroupSeparator = ""
        dim prijsdec As Decimal = Convert.toDecimal(prijsstr, ks)
        return prijsdec
End Function


meteen maar decimal voor mn bedragen genomen, hoewel ik er centen van maak dus niet noodzakelijk(?)

Verwijderd

Pas je op met bedragen afvangen via get's, als je dit gebruikt samen met een webwinkel oid zou iemand op deze manier makkelijk z'n eigen prijs kunnen hanteren.

/edit
nee geen ervaring, ben voor school bezig ;)

[ Voor 18% gewijzigd door Verwijderd op 25-01-2006 20:02 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:05
Als je alles in centen zet, kan je die bedragen in cent idd in een integer zetten.

https://fgheysels.github.io/


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 07-04 15:45

dotcode

///\00/\\

post je al je opdrachten hier, lekker makelijk dan!

Modbreak:Laat dergelijke replies maar achterwege.
Schoolopdrachten zijn toegelaten, mits de TS zelf ook meoite doet om tot een oplossing te komen, en hij niet gewoon de opdracht hier post, en verwacht dat iemand anders het voor 'm gaat oplossen zonder dat hij iets hoeft te doen

[ Voor 74% gewijzigd door whoami op 26-01-2006 10:22 ]

Pagina: 1