How to Split an Integer

I want to Split a 4 digit integer in its Parts, so for example 3457 to 3 and 4 and 5 and 7, so that i can show it on a 7 segment 4 digit display. How do i do this?

Use integer division by 10 and the "%" (modulus) operator.

3547%10 = 7
3547/10 = 354
354%10 = 4
etc.

What is the variable type that holds the alleged four digit number?

You can use integer division with powers of 10

3547 / 1000 = 3

3547 - 3 * 1000 = 547

547 / 100 = 5

547 - 5 * 100 = 47

and so forth. This will fail if you go past 9999.

HTH

a7

int n = 3547;  // or whatever number

// split number n into its digits
byte ones = n % 10;
byte tens = (n / 10) % 10;
byte hund = (n / 100) % 10;
byte thou = (n / 1000) % 10;
1 Like

why not a simple

int number = 3457;
display.print(number);
1 Like

Assume that you have the following 4-digit cc-type 7-segment Display Unit (Fig-1) and you want to show 3457 over there.
cc4R
Figure-1:

Given:
int y = 3457;

1. Perform %10 (modulus) operation on y to get remainder 7.
byte indexDP3 = y%10; // indexDP3 = 7
2. Divide y by 10 to get quotient 345.
y = y/10; //y = 345

Repeat the above process until quotient is 0.

3. Sketch to find 3 4 5 7 and save in an array.

int y = 3457;
byte indexDP[4];
int i = 3;

void setup() 
{
  Serial.begin(9600);
  do
  {
    indexDP[i] = y%10; //indexDP[3] = 7, indexDP[2] = 5, ....
    y = y/10;
    i--;
  }
  while(y !=0);
  for(int j = 0; j < 4; j++)
  {
    Serial.print(indexDP[j], HEX);
    Serial.print(' ');
  }
}

void loop() 
{
  
}

Output:

3 4 5 7 

4. Use the value of indexDP[0] (3 = 0x03) to consult the following array (which contains cc-codes vs digit) to get cc-code of 3 and show it on DP0 position of the display unit.

byte lupTable[] = 
{
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, //0, 1, 2, 3, 4, 5, 6, 7
    0x7F, 0x6F, 9x77, 0x7C, 0x39, 0x5E, 0x79, 0x71    //8. 9, A, b, C, d, E, F
};

Codes:

byte ccDP0 = lupTable(indexDP[0]);    //ccDP0 = 0x4F ;; cc-code of 3
PORTB = ccDP0;  //lower 6-bit goes to Display unit for segments: f, ..., a
digitalWrite(6, bitRead(ccDP0, 6));    bit-6 of ccDP0 goes to segment g of display unit
digitalWrite(7, bitRead(ccDP0, 7));    bit-67 of ccDP0 goes to segment p of display unit
PORTC = 0b111110;   //3 appears on DP0 position of display unit;
delay(10);

5. If you use SevSeg.h Library, the tasks of Step-3/4 will be done by the Library. You may study the example of this thread.

Perhaps the following will work!

#include<SevSeg.h>
SevSeg sevSeg;

int number = 3457;
sevSeg.setNumber(number, 0, 0);
sevSeg.refreshDisplay();

Wait, is it 3457 or 3547?

a7

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.