Если вы не добавите .0f
, оно будет рассматриваться как целое число, и целочисленное деление действительно сильно отличается от деления с плавающей запятой:)
float percent = (n * 100.0f) / v;
Если вам нужно целое число из этого, вы, конечно, можете снова привести float
или double
в целое число.
int percent = (int)((n * 100.0f) / v);
Если вы знаете, что ваше значение n меньше 21474836 (то есть (2 ^ 31/100)), вы можете делать все, используя целочисленные операции.
int percent = (n * 100) / v;
Если вы получаете NaN, это потому, что независимо от того, что вы делаете, вы не можете делить на ноль, конечно ... это не имеет смысла.