Cannot understand why this code work but this not

I've done a simple aurduino sketch, I have this code, and this don't work:

#define voltageInput A0
int qntR;
float mr;
float qr;
float Distanza;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(voltageInput,INPUT);
mr=(130-20)/float(1023-205);
qr=20-mr*205;
Serial.print(mr,4);
}

void loop() {
// put your main code here, to run repeatedly:
Distanza=mr*qntR+qr;
Serial.print("Distanza: ");
Serial.print(Distanza);
Serial.print(" cm");
Serial.println("");
}

And the I have this code:

#define voltageInput A0
int qntR;
float mr;
float qr;
float Distanza;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(voltageInput,INPUT);
mr=(130-20)/(1023-205);
qr=20-mr*205;
Serial.print(mr,4);
}

void loop() {
// put your main code here, to run repeatedly:
Distanza=mr*qntR+qr;
Serial.print("Distanza: ");
Serial.print(Distanza);
Serial.print(" cm");
Serial.println("");
}

In which I have delete the float from mr=(130-20)/float(1023-205);,and if I delete the float the code stop working (mr is always equal to 0), why?

• What is is that doesn't work? Please include the serial output Oct 22 '19 at 15:44
• it say that mr is always equal to 0 Oct 22 '19 at 15:46

Your problem is that you are doing integer maths.

mr = (130-20)/(1023-205)

reduces to:

mr = 110/818

Which normally equates to:

mr = 0.135

But since all those numbers are integers the result is an integer, and is truncated at the decimal point, which means that mr is assigned:

mr = 0

You can force floating point maths by either including a decimal point in one of the numbers, or adding the suffux f:

mr = (130-20)/(1023-205.0)

or

mr = (130-20)/(1023-205f)

Or casting a portion of the sum to a float as your other code does.

• but why, I have previusly said that mr is a float variable Oct 22 '19 at 15:50
• Because you have just numbers the preprocessor does the calculation, not the compiler. The compiler just gets the number 0.
– Majenko
Oct 22 '19 at 16:00
• so if I do math with integers, the preprocessor will truncate the number in an integer? Oct 22 '19 at 16:17
• If you just have literal numbers, yes.
– Majenko
Oct 22 '19 at 16:17
• @Majenko thanks a lot! Oct 22 '19 at 16:23