Run if (or similar) statement once

Well, it seems I've still misunderstood things. Taking my code that utilizes floats still, I'm trying to use microseconds instead of milliseconds just to add a little bit more accuracy in there. Also, it suddenly dawned upon me, that as shaft speed increases - dpm will of course get larger, and thus more accurate in itself. I feel I need to get the working code, working again using micros before I try to use int maths.

What I don't understand now, is having changed to micros, when printing dpm to serial - I get a value of 0, yet rpm still works. So it almost seems that the controller knows there are more numbers to the float value of dpm, but just doesn't want to show them? If I multiply dpm by a large value and print to serial, then it's a non zero number - of course, otherwise rpm would not work. Here's the version of code i'm talking about;

volatile int timer_pulsecount = 0;
volatile int angle_pulsecount = 0;
volatile unsigned long p_lastpulse = 0;
unsigned long c_lastpulse = 0;
float timer_c_pulsemicros = 0;
float timer_p_pulsemicros = 0;
float threepulsetime = 0;
float threepulsetimecopy = 0;
int rpm = 0;
int tooth_spacing = 10;
int lastCommand = 0;
float dpm = 0;
unsigned long debug_p_millis = 0;
unsigned long debug_c_millis = 0;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, crank, RISING); // din D2
}

void crank()
{
  timer_pulsecount++; //
  p_lastpulse = micros();
}

void loop()
{

  ////////////////// SPEED AND POSITION TRACKING ///////////////////

  c_lastpulse = micros();
  timer_c_pulsemicros = micros();
  dpm = 3 * tooth_spacing / threepulsetimecopy; // causing problem, due to multiplying diff types
  rpm = (dpm * 60000000) / 360; // converts degrees per micro to rpm

  if (lastCommand != timer_pulsecount){
    lastCommand = timer_pulsecount;
    switch (lastCommand){
    case 1:
      timer_p_pulsemicros = timer_c_pulsemicros;
      break;
    case 3:
      threepulsetime = timer_c_pulsemicros - timer_p_pulsemicros; // needs to be reset to 0
      threepulsetimecopy = threepulsetime;
      break;
    }
  }

  if(timer_pulsecount > 3)
  {
    timer_pulsecount = 1;
    threepulsetime = 0;
  }
  
  if((c_lastpulse - p_lastpulse) >= 250000) // used to reset dpm & rpm to 0 when no pulses come in
  {
    dpm = 0;
    rpm = 0;
  }

  ////////////////// DEBUGGING SERIAL STREAM ///////////////////

  debug_c_millis = millis(); // starts counting currentMillis
  if(debug_c_millis - debug_p_millis >= 500) // if current - 0 is > 1000, run if script
  {
    debug_p_millis = debug_c_millis; // set previous to current
    Serial.println(timer_pulsecount);
    Serial.println(tooth_spacing);
    Serial.println(threepulsetimecopy);
    Serial.println(dpm);
    Serial.println(rpm);
    Serial.println("");
  }
}

// print the above data, timer_pulsecount increments correctly
// timer_p_pulsemicros is set to current when timer_pulsecount = 1
// previous and current pulsemicros latch as they should
// three pulse time saves on 3, resets when timer_pulsecount loops to 1