Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[.NET Webservices]Probleem met converteren decimal

Pagina: 1
Acties:

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 14-11 10:46
Ik zal even in het kort de situatie die wij hier hebben uitleggen.

Wij maken gebruik van de webservices van een externe partij, welke ons een aantal getallen aanlevert in Amerikaans formaat, dwz getallen worden gescheiden door een punt voor de decimalen. Het veld waarin dit staat is een decimal maar wordt dus via xml naar ons gezonden.

Nu voel je hem al aankomen, en waarschijnlijk is het redelijk simpel opgelost, maar hoe krijg ik dit getal in een correcte waarde in mijn programma? Op mijn eigen client werkt het goed, alleen daar staat de localization op nederlands, terwijl de server waar het programma wat ik heb gebouwd op een andere instelling draait, waarschijnlijk ook Amerikaans.

Wanneer ik het programma nu test op mijn eigen client worden de getallen correct berekent en klopt alles, echter op de server worden de getallen allemaal x100 gedaan aangezien de laatste 2 decimalen(centen) worden genegeerd en gewoon als euro's mee komen. 121,34 wordt dus 12134

Ik heb hier al geprobeerd om in de web.config van de webservices de localisatie op en-Us te zetten, echter hielp dit niet. Wanneer ik in de logs kijk blijven de getallen incorrect x100 gedaan worden.

Heeft iemand een idee hoe dit op te lossen? Waarschijnlijk moet ik bij de webservice van de externe partij ergens opgeven dat de getallen via een bepaalde localisatie/currency opgehaald moeten worden, echter weet ik niet precies hoe.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Kijk eens in de Globalization namespace en CultureInfo
The NumberFormatInfo class defines how currency, decimal separators, and other numeric symbols are formatted and displayed based on culture. For example, the decimal number 10000.50 is formatted as 10,000.50 for the culture "en-US" and 10.000,50 for the culture "de-DE".

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 03:03

Gerco

Professional Newbie

Staan die getallen dan in de wsdl als xsd:string gedefinieerd? Ik dacht dat de Xml schema specificatie heel duidelijk was in de representatie van getallen in Xml. Van dit probleem zou je dan dus ook alleen last mogen hebben wanneer je zelf die getallen probeert te interpreteren in plaats van .NET dat te laten doen via de wsdl.

Als je in de wsdl de getal velden opneemt als xsd:decimal zou het opgelost moeten zijn.

[ Voor 24% gewijzigd door Gerco op 22-10-2008 09:47 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:57

Haan

dotnetter

Met de eerder vermelde CultureInfo zou je dit prima op moeten kunnen lossen.

Kater? Eerst water, de rest komt later


Verwijderd

Onderstaande methode al geprobeerd?

C#:
1
2
string temp = [webservicewaarde]
double x = double.Parse(temp, new System.Globalization.CultureInfo("en-US"));

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 14-11 10:46
Het klopt idd de wsdl defineert het belangrijkste veld als een string waarin de balans staat van de client op dat moment, en nog 2 andere velden waarmee wordt gerekend die beide double zijn. Deze worden vervolgens geconverteerd naar een decimal en er wordt dan mee gerekend.

Wat de reden is dat de externe partij heeft gekozen om de getallen in dit formaat aan te leveren was voor mij ook al eerder onduidelijk. Ik zal de numberformat eens gaan toepassen en kijken of dit werkt. Als ik jullie reacties zo lees zou dit idd het probleem moeten oplossen. Duurt echter alleen wel even ivm releasen enzo.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:43
C#:
1
XmlConvert.ToDecimal()

Als het goed is, gaat die decimal in XML volgens bepaalde conventies opgeslagen worden. Die XmlConvert class bevat methods (oa ToDecimal) om die waardes goed te gaan omzetten naar CLR types.

[ Voor 73% gewijzigd door whoami op 22-10-2008 10:38 ]

https://fgheysels.github.io/


  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 14-11 10:46
Bedankt mensen, het werkt perfect. Dmv het parsen met het meegeven van een cultureinfo was het probleem opgelost :).

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-11 11:40

Janoz

Moderator Devschuur®

!litemod

FoOnEeN schreef op donderdag 23 oktober 2008 @ 08:46:
Bedankt mensen, het werkt perfect. Dmv het parsen met het meegeven van een cultureinfo was het probleem opgelost er een workaround te fabriceren.
Niet om het een of ander, maar het probleem van de foute wsdl is niet opgelost. Uiteraard is dat niet een probleem van jullie, maar van de aanbieder van de webservice.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1