You are running into the problem that 0.1 cannot be exactly represented as a floating point number in binary. When you subtract 0.1 each time through the loop, you are not getting 24.3, but a very slightly smaller number like 24.299999. When printing a float to 1 decimal place, the number gets rounded and will appear as 24.3, but when converting from a float to an integer the decimal part gets truncated, resulting in (24.299999 * 10) being stored as 242 in the int, not 243.
Here is a modified version of your sketch that should give the proper digit breakdown, and avoids the multiple conversions between floats and integers:
float Volts;
int Tenths;
int Ones;
int Tens;
float PresentVolts;
void setup() {
Serial.begin (9600);
//Test Data
Volts = 25.0;
}
void loop() {
PresentVolts = Volts;
//round and convert to integer
int intVolts = (PresentVolts + 0.05) * 10;
Tenths = intVolts % 10;
Ones = (intVolts / 10) % 10;
Tens = intVolts / 100;
Serial.println (Volts, 1);
Serial.println(Tens);
Serial.println (Ones);
Serial.println (Tenths);
Serial.println (" ");
delay (250);
Serial.println(" ");
Volts = Volts - .1;
if (Volts < 0) {
Volts = 25;
}
}