/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Problemer med decimaler i Qbas
Fra : perchris
Vist : 910 gange
200 point
Dato : 03-02-06 23:19


REM Problemer med decimaler i Qbasic 4.5
REM
REM Jeg har problemer med afrunding af tal i Qbasic 4.5
REM mine tal går op til 1000000.01 altså må jeg definere
REM variable AS DOUBLE
REM jeg får en masse decimaler der kan få ørebeløbet
REM til at blive forkert, derfor bliver jeg nødt til at
REM smide dem væk en gang imellem (CINT(z * 100)) / 100
REM kan klare det ved små tal
REM ved store tal må jeg trække heltallet fra først
REM og så lægge det til bagefter.
REM Findes der en smartere måde at gøre det på?
REM
REM Og findes der en anden måde at få fast 2 decimaler
REM så feks. 10 kan udskrives som 10.00 uden
REM at konvertere til en streng, finde decimalseperator
REM og hægte 0 eller .00 på strengen
REM det gør altså programmet meget uoverskueligt
REM at skulle hoppe til en subrutine så mange gange
REM sædte dem sammen og så kun udprinte strenge
REM MVH Per
CLS
DIM x AS DOUBLE
DIM y AS DOUBLE
DIM z AS DOUBLE
x = 1000000

y = 1.1
z = x - y
PRINT z

zz = FIX(z)
z = z - zz
z = (CINT(z * 100)) / 100
z = z + zz
PRINT z


 
 
Accepteret svar
Fra : IBM760

Modtaget 200 point
Dato : 04-02-06 15:02

Hej perchris,

det er snart nogen år siden, jeg har programmeret i Qbasic 4.5, men så vidt jeg husker følger Qbasic standarden for Basic - så hvis det er tilfældet mener jeg, at dit problem kan løses på følgende måde:

Afrunding til 2 decimaler foretages via funktionen INT, som uddrager heltallet og som du selv er inde på - først gange med 100, foretage afrunding og derefter dividere med 100.
Eks: Let A = (INT(z*100))/100

Derefter ønsker du at udskrive resultatet med 2 decimaler, hvor du kan bruge funktionen PRINT USING med en editeringsmaske.
Eks: PRINT USING "#########.##"; A
Using statement kan editeres på mange forskellige måder, som kan være lidt forskellig fra i forskellige Basic udgaver og landeopsætning. Hvis du eks. ønsker tusindpunkt i din udskrift skal strengen evt. se ud sådan "###,###,###.##"
Du vil også kunne erstatte opsætningen med en streng variabel - eks.:
B$="###,###,###.##"
PRINT USING B$; A

Håber at ovenstående hjælper lidt på vej.

Mvh Ivan

Godkendelse af svar
Fra : perchris


Dato : 06-02-06 21:51

Tak for svaret IBM760.
Jeg har fået omskrevet mit pgm. og det virker fint.
PRINT USING havde helt forbigået min opmærksomhed, selvom jeg havde set
kommandoen før, kendte jeg ikke dens funktion.
Tak

Mvh Per

Kommentar
Fra : IBM760


Dato : 06-02-06 22:13

Du er velkommen.

Det er snart en del år siden jeg har programmeret i Basic, men for en del år siden da jeg var ansat i Nixdorf Computer - var jeg med til, at programmere adskillige administrative systemer i forskellige Basic dialekter, over en periode af 10-15 år.

Mvh Ivan

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177413
Tips : 31962
Nyheder : 719565
Indlæg : 6407798
Brugere : 218875

Månedens bedste
Årets bedste
Sidste års bedste