Toon posts:

[Delphi] Float probleem verschillende Talen.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik programmeer al mijn programma's op een Machine waarop de Engelse Windows is geinstalleerd.

Wanneer ik nu in een editbox een getal op geef met een punt er in (Bedragen bijv.) 6.95 en dit met de functie strtofloat omzet naar een float. Is er geen enkel probleem.

Ga ik dit programma draaien op een Nederlands talig machine dan is de punt(.) in een keer geen geldig 'Float Value' meer. Ik dien hier in een keer de komma(,) te gebruiken(6,95).

Wanneer ik deze waarde naar en *.txt file schrijf staat er netjes inde file.
6.95.

Weet iemand hoe ik deze verschilde vormen van notaties gelijk kan trekken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Dit heeft te maken met de regional settings in Windows.

Echter, je kan deze in Delphi 'overriden' door middel van de ThousandSeparator variabele.

De vraag is echter of je dat wel wilt veranderen. Als iemand in de regional settings van Windows instelt dat hij een komma wil als scheidingsteken voor duizendtallen, dan zal hij er ook van uit gaan dat hij dat teken ook in uw applicatie kan gebruiken als separator. Als jij daar echter gaat mee lopen pielen, dan zal uw applicatie zich -in het opzicht van de gebruiker dan- inconsequent gaan gedragen.

[ Voor 59% gewijzigd door whoami op 04-08-2003 17:39 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Een ThousandSeparator zegt me niets.
Kun je die setten ergens in mijn proggie.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Verwijderd schreef op 04 August 2003 @ 17:39:
Een ThousandSeparator zegt me niets.
Tja, die bestaat echt wel. Nu weet je het.
Kun je die setten ergens in mijn proggie.
Ja.
Check misschien eens de Delphi help en zoek eens op ThousandSeparator.
P&W is geen forum waar je zomaar alles voorgekauwd voorgeschoteld krijgt hoor...

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 04 August 2003 @ 17:38:
Als jij daar echter gaat mee lopen pielen, dan zal uw applicatie zich -in het opzicht van de gebruiker dan- inconsequent gaan gedragen.
Is er dan mischien een functie/procedure die de regiosettings kan uitlezen en aan de hand daarvan een komma of punt moet gebruiken.

  • Dommel
  • Registratie: Maart 2001
  • Laatst online: 18-08 11:30

Dommel

Professioneel Software Sloper

Dat heb ik ook gehad en heb dat opgelost door middel van de volgende procedure:
Delphi:
1
2
3
4
5
6
procedure SetSeparators;
begin
  DecimalSeparator := '.';
  DateSeparator    := '-';
  TimeSeparator    := ':';
end;

Deze zet ook meteen de scheidingstekens bij de datum en tijd zoals je die wil hebben. Ondanks dat de reginoal settings anders staan gebruikt je programma deze settings als je deze op het juiste punt eerst even aanroept :)

Lego Taj Mahal te koop --> https://gathering.tweakers.net/forum/list_messages/2109838


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als je een getalswaarde in gaat lezen als een string en dan een conversie doet naar een float en daar een probleem met je getalsformaat ondervindt dan kun je beter zorgen dat je datatype in eerste instantie goed is.
Als het niet anders kan dan moet je eens kijken in de help by national language support oid.
Eventueel kun je ook met maatwerk code aan de gang:
http://atlas.csd.net/~cgadd/knowbase/MISC0156.HTM

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Verwijderd schreef op 04 August 2003 @ 17:42:
[...]


Is er dan mischien een functie/procedure die de regiosettings kan uitlezen en aan de hand daarvan een komma of punt moet gebruiken.
Die regional settings kan je zelf in Windows aanpassen.
Je Delphi applicatie gaat dan zelf wel nagaan of een getal zich in het juiste formaat bevindt als je er een conversie wil opdoen.

Check misschien ook eens de functies FloatToStrF, CurrToStrF, ....

https://fgheysels.github.io/


Verwijderd

Topicstarter
DecimalSeparator := '.';
DateSeparator := '-';
TimeSeparator := ':';

Las in een ander topic dat dit alleen geld voor het afbeelden en niet voor de invoer ?!
Maargoed ik ga wel wat proberen

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 04 August 2003 @ 17:52:
Las in een ander topic dat dit alleen geld voor het afbeelden en niet voor de invoer ?!
Maargoed ik ga wel wat proberen
Werd tijd :/

Misschien een idee om wat minder onze tijd te verspillen met 7 posts voordat je botweg de (correcte) oplossing uit de 1e reply gaat proberen.

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 04 August 2003 @ 19:48:
[...]

Werd tijd :/

Misschien een idee om wat minder onze tijd te verspillen met 7 posts voordat je botweg de (correcte) oplossing uit de 1e reply gaat proberen.
Och hier
We zullen jouw nog eens helpen.

BTW Het werkt :P

Verwijderd

Uit de online help voor StrToFloat: The DecimalSeparator global variable defines the character that must be used as a decimal point. Thousand separators and currency symbols are not allowed in the string.
En dan krijg je dus (terecht) jouw foutmelding.
Nu kun je wel die separators binnen je applicatie overriden, maar dat is natuurlijk geen oplossing.

- Wat als een user een komma intikt i.p.v. een punt?
- Wat als je later gaat koppelen met programma's/systemen die zich wel aan de locale settings houden?

Een paar jaar terug heb ik precies dezelfde fout gemaakt (nou ja, net andersom: DecimalSeparator forceren op ','). Zolang we binnen Europa bleven was er niks aan 't handje, maar bij de eerste installatie in de US was 't toch wel een probleem. :)

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Ik wil niet vervelend doen, maar je kan een floating point waarde ook opslaan als een binary, dan heb je helemaal geen gezeik met regionale settings. Als je Het gewoon gewoon als een 64-bits waarde (een Double dus) bewaard, is het op iedere geweste computer (zelfs andere architecturen en andere (programmeer)talen) weer in te lezen.

Je kan natuurlijk ook een StringReplace doen tijdens het lezen/schrijven, maar dat is natuurlijk niet erg snel bij grote bestanden.

日本!🎌


Verwijderd

Topicstarter
_Thanatos_ schreef op 05 August 2003 @ 04:22:
Ik wil niet vervelend doen, maar je kan een floating point waarde ook opslaan als een binary, dan heb je helemaal geen gezeik met regionale settings. Als je Het gewoon gewoon als een 64-bits waarde (een Double dus) bewaard, is het op iedere geweste computer (zelfs andere architecturen en andere (programmeer)talen) weer in te lezen.

Je kan natuurlijk ook een StringReplace doen tijdens het lezen/schrijven, maar dat is natuurlijk niet erg snel bij grote bestanden.
Het is niet zo zeer de opslag die problemen geeft.

Het is puur de conversie van een String naar een float.

Maar heb het al opgelost.
Door de keys in de string gewoon af te vangen.
En mbv een thousandseparator en decimalseparator

[ Voor 10% gewijzigd door Verwijderd op 05-08-2003 09:40 ]


Verwijderd

Topicstarter
Mensen van GoT hartstikke bedankt voor jullie hulp.

[ Voor 20% gewijzigd door Verwijderd op 06-08-2003 16:57 ]

Pagina: 1