Toon posts:

[C++ Builder] Rekenen met double uit edit venster*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Stel ik heb 2 edit vensters en één knop:

C++:
1
2
3
4
5
double dGetal1 = Edit1->Text.ToDouble(),
            dGetal2;

dGetal2 = (dGetal1*2);
Edit2->Text = dGetal2;


Dit voorbeeldje werkt niet als ik "2.0" invul in Edit1 omdat ik Nederlandse Windows heb. Op een engelse versie werkt hij wel.
Hoe kan ik ervoor zorgen dat ik toch 2.0 ipv 2,0 kan invullen, én dat het op elke Windows Versie (taalonafhankelijk) kan draaien?

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

curry684

left part of the evil twins

Zelf parsen.

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:24
Zelf hetgeen in die EditBox staat gaan overlopen en checken of het een geldig getal is (en dus zelf rekening houden met . of , ).

Maar, wat ga je doen als een gebruiker nu het volgende ingeeft:

1000.000,00
of
1000,000.00

?

https://fgheysels.github.io/


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

curry684

left part of the evil twins

Internationalization features zijn er juist om automatisch variabelen te kunnen parsen in de correcte locale van de end-user zonder dat de programmeur zich om 100+ locales hoeft te bekommeren. Als je die features niet wilt gebruiken moet je dus zelf parsen.

De handigste manier hier is om te zoeken naar een punt of een komma, en dan vervolgens met substrings de 2 delen te concateneren met de correcte delimiter ertussen. Of dat een komma of een punt is in de huidige locale is kun je in een globale variabele van VCL terugvinden.

Professionele website nodig?


Verwijderd

Topicstarter
Oke, het gaat namelijk om een bedrag.
Het bedrag wordt uit een file gelezen; dus het heeft altijd hetzelfde formaat.
Bijvoorbeeld: 20.98

Beetje vervelend als ik op een punt moet gaan zoeken; ik had gehoopt dat er wel een standaard functie zou zijn :)

offtopic:
ps. waarom staat er een * achter dit topic :?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 26-08 19:49

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 december 2002 @ 17:58:
offtopic:
ps. waarom staat er een * achter dit topic :?
offtopic:
Omdat 1 van de mods je topic title heeft aangepast, zoals je vast wel in de FAQ had kunnen lezen ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan het tijdelijk en lokaal voor je programma veranderen dmv de globale variable genaamd DecimalSeparator in sysutils.hpp.

We adore chaos because we like to restore order - M.C. Escher


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

curry684

left part of the evil twins

Verwijderd schreef op 27 December 2002 @ 17:58:
Oke, het gaat namelijk om een bedrag.
Het bedrag wordt uit een file gelezen; dus het heeft altijd hetzelfde formaat.
Bijvoorbeeld: 20.98

Beetje vervelend als ik op een punt moet gaan zoeken; ik had gehoopt dat er wel een standaard functie zou zijn :)
Die is er dus zoals ik zei, en het hele punt is juist dat die 'internationalized' geconverteerd wordt zodat je daar niet mee bezig hoeft te houden. JIJ wil zonodig iets non-standaards doen, dan moet je niet klagen dat het systeem dat niet ondersteunt.

Ennuh domme vraag: als je uit een file leest, waarom lees je in je code-sample dan in godesnaam uit een edit-box?!? Ik dacht dat het hele probleem juist was dat je iedere mogelijke userinput wilde afvangen, maar nu weet je ineens het formaat al wel.... :?

Naja maakt het alleen maar makkelijker, hoef je alleen maar alle punten te vervangen door de DecimalSeparator global en dan te converteren.
offtopic:
ps. waarom staat er een * achter dit topic :?
Omdat we aan je topictitle niet konden zien of je met een double zat te rekenen in Perl, Python, Lisp, Assembler, C, C++, C#, Java, PHP of embedded C in een wasmachine-EPROM. En dus hebben de vriendelijke moderators je topictitle gewijzigd zodat de rest van de bezoekers dat wel kan zien, en het sterretje is een hint dat je dat zelf de volgende keer moet doen :Y)

Professionele website nodig?

Pagina: 1