Decimale punt in proton/picbasic plaatsen.

Ik ben bezig met een 20 MHz GPS diciplined oscillator.
Ik wil het eindresultaat weergeven in de vorm 20000000.00Hz.
Ik maak een 10 cijferige resolutie
Als ik deze decimale punt wil plaatsen , dan moet ik het uitkomst door honderd delen, met als resultaat dat ik daarbij een afronding krijg.
daarna komt er nog een afronding van de milliHertzen.
Samen klopt het niet meer.
Is er een oplossing om in proton/picbasic deze decimale punt er zomaar tussen te plaatsen, misschien rechtstreeks op het display ?

Guus@Sint-Michielsgestel
Arco

Special Member

Als je deelt door 100.0 krijg je waarschijnlijk geen afronding. Resultaat moet je dan wel naar een float schrijven...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Rob W.

Honourable Member

Volgens mij kun je eerst delen door 100 en daarna met de modulus de rest achter de komma achterhalen.
MHz/100
MHz//100
En dat dan als twee variabelen naar je display schrijven met een punt ertussen.

http://www.picbasic.nl/beginners4a.htm#Modulus

Leest mee sinds 19 augustus 2001..

Bedankt Rob, ik heb deze cursus 15 jaar geleden gedaan, heb hem nog geheel uitgeprint liggen. Maar de leeftijd speelt me parten. 8)7

Guus@Sint-Michielsgestel

ER was nog een akkefietje, als de rest van de deling kleiner dan 10 is, dan wordt b.v. een 8 als rest gedisplayed als .8, terwijl de correcte waarde .08
is.
Oplossing:

Display:
Print At 2,1 , Dec (1999997440+ Total)/100,"."
REST = ((1999997440+ Total)//100))
Print At 2,10,Dec REST ,"Hz", "V78 "
If REST < 10 Then Print At 2,10, "0",DEC1 REST ,"Hz", "V78 "

Guus@Sint-Michielsgestel
Lucky Luke

Golden Member

Lang geleden dat ik wat met picbasic gedaan heb, maar kun je er geen string bewerkingen in doen?

Onder water wordt sowiso het getal omgezet naar een string alvorens die naar het display te schrijven.

Als je het getal als string hebt, kun je er een punt in zetten, en vervolgens de aangepaste string printen.

Het meest efficiënt is waarschijnlijk zelfs gewoon het printen van het getal te onderbreken, een punt te printen, en dan de rest van het getal. Het wordt sowiso karakter voor karakter geprint...

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

Lucky Luke: Dit is precies wat ik gedaan heb, zie boven :)

Guus@Sint-Michielsgestel
Lucky Luke

Golden Member

Nee, wat ik bedoel zou in een soort python-achtige pseudo-code neerkomen op:

verilog code:



getal = 12345678
"voorbeeld getal, in werkelijkheid gaat er een berekening aan vooraf,
het is ook eigenlijk een fixed-point commagetal met 2 decimalen: gewoon 100 keer te groot"

buffer = getal.tostring // of whatever je doet om een string van een getal te maken
"ik ga er van uit nu een string / char array te hebben met als eerste element (positie 0) '1' 
en als 8e element (positie 7) '8', afgesloten met 0 (niet ' 0')  "

print(buffer[0:5]) // slice. Print de eerste 6 elementen van de string, de eerste 6 getallen dus
print "," // print je comma
print(buffer[6:7] // en print de laatste 2 elementen van de string, dus het stukje achter de comma

Onder water zit in picbasic iets dat karakter voor karakter de tekens naar het scherm schrijft.
Als je dat kunt vertellen dat het na de eerste 6 tekens een punt of komma moet printen voordat het de rest doet, ben je er.

Maar, daar is basic de taal niet voor. Dat is opgezet om makkelijk te zijn, niet om dergelijke trucjes uit te halen die maar in 1 situatie handig zijn en verder niet bruikbaar.

Tenzij er iets in zit dat met "fixed point" getallen werkt, kijk eens in de index van de manual? Maar ik vrees van niet.

Edit: I stand corrected!

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)
Arco

Special Member

Maar, daar is basic de taal niet voor.

??
Mikrobasic heeft daar de functie FloatToStr() voor... (geformatteerde string die je zo naar het display kunt schrijven.)
Proton/picbasic is zo ver gesimplificeerd, dat dit soort dingen niet makkelijk te doen is (basic of niet heeft er niks mee te maken)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
marcob

Golden Member

Op 13 februari 2021 22:26:56 schreef Arco:
[...]
??
Mikrobasic heeft daar de functie FloatToStr() voor... (geformatteerde string die je zo naar het display kunt schrijven.)
Proton/picbasic is zo ver gesimplificeerd, dat dit soort dingen niet makkelijk te doen is (basic of niet heeft er niks mee te maken)

PicBasic heeft daar gewoon een funkte Str$ voor.

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

Lucky Luke, bedankt ik had niet door wat je met de STR$ bedoelde, nu wel :)

Guus@Sint-Michielsgestel