PDA

View Full Version : Split decimal digits



emavil
- 12th December 2006, 23:37
Anybody who has an idea on how to split the value of a 4-digit word variable into ones, tenths, hundreths and thousands.

Example:

The program is performing counting from 0 to 9999.
Counter Var Word

Assuming Counter has a value of 5389.
I'm planning to store 9 to Digit1s variaible
8 to Digit10s variable
3 to Digit100s variable
5 to Digit1000s variable
I tried using DIG operator, only the first two decimal digits are correct (ones & tenths).

Is there any mathematical method of splitting decimal digits?

sougata
- 13th December 2006, 01:37
Hi,

It works for me. Can you post more of your code I always use it for my Seven Segment Display Routines. http://www.melabs.com/resources/pbpmanual/4_0.htm#4177

HenrikOlsson
- 13th December 2006, 06:26
Hi,
The DIG operator should work for that, I can't say why it doesn't work for you. A mathematical way may be:


Counter var word
Thousands var byte
Hundreds var byte
Tens var byte
Ones var byte

Counter = 5389

Thousands = Counter / 1000 'Thousands is now 5
Counter = Counter - (Thousands * 1000) 'Counter is now 389

Hundreds = Counter / 100 'Hundreds is now 3
Counter = Counter - (Hundreds * 100) 'Counter is now 89

Tens = Counter / 10 'Tens is now 8

Ones = Counter - (Tens * 10) 'Ones is now 9


/Henrik Olsson.

mister_e
- 13th December 2006, 06:31
DIG work, have a look at the following
http://www.picbasic.co.uk/forum/showthread.php?t=1044

emavil
- 13th December 2006, 08:36
thanks a lot guys, i think there's a minor glitch with the programming.
It's working now with DIG.

But the mathematical approach was good.

therian
- 8th January 2007, 10:44
Dig is great function but how to find out how many digits in the number if you dont know it, and what Dig function will do if you try to asses position what do not exist ?
W0 = 54321
B1 = W0 DIG 6 <---?

HenrikOlsson
- 8th January 2007, 11:24
Hi,
The manual says:


DIG returns the value of a decimal digit. Simply tell it the digit number (0 - 4 with 0 being the rightmost digit) you would like the value of, and voila.

This makes sense since the largest variable supported by PBP is 16bits so a word sizes variable can't be more than 5 digits.

If you have a word sized variable and it's value is 23 and you ask for DIG 2 it will return the value 0 since your variable is 00023.

HOWEVER, the program compiles just fine even if you say DIG 6. I don't know what it will return. Perhaps it "spills" over into the next byte in RAM.

/Henrik Olsson.

sayzer
- 8th January 2007, 13:29
Dig is great function but how to find out how many digits in the number if you dont know it, and what Dig function will do if you try to asses position what do not exist ?
W0 = 54321
B1 = W0 DIG 6 <---?



What I get from the question is this:
W0 is WORD

Say W0 = 23.
That makes it W0 = 00023.
IF you want to know which digits are NOT zero then you need a "check" routine.

Example: W1 = 00103. We have two zeros we do not need. So DIG3 and DIG4 are not required to be read (for some logical reason!)

I think this is what the question was asking.
In that case, starting from Left to Right, we have a check routine.


IF W1 DIG 4 = 0 THEN
IF W1 DIG 3 = 0 THEN
...

ELSE
'Do something....
ELSE
'Do something....
....
etc.



Do I make dead comments again?

therian
- 8th January 2007, 19:09
wait, does it mean PBP will make word always 5 digit and byte 3 digit? hm I newer seen it in my book

HenrikOlsson
- 9th January 2007, 06:09
Hi,
I don't really follow you here....
A word is always 16bits (0-65535) so yes, 5 digits. Digits "not used" will return a 0 when used with the DIG operator. If you are using the DIG operator for display purposes and don't want to display the zeros you need to use a check routine like in Sayzer's example.

/Henrik Olsson.

therian
- 10th January 2007, 00:20
I just wanted to build couple 7 led displays so I was thinking about how to measure how many digits in the number to send each number to led display