当浮点数小于1时,函数返回0

jse*_*rtx -1 c++ floating-point

我有这个代码来计算二叉树的主要分支之间的差异,重要的是最终的.调试我到达最后一个表达式:

return difRama/total;
Run Code Online (Sandbox Code Playgroud)

这将始终返回0到1之间的小数,以百分比表示.我得到的情况如下:

  • 返回5/15
  • 返回4/10

    float Arbol::diferenciaRamas(pnodo rama1, pnodo rama2){
        int total, difRama, pesoIzq, pesoDer;
    
        /* Calculamos pesos rama izq yder*/
        pesoIzq = pesoRamificaciones(rama1);
        pesoDer = pesoRamificaciones(rama2);
    
        /* Diferencia de peso entre ramas */
        difRama = abs(pesoIzq - pesoDer);
    
        /* Total de peso del arbol */
        total = (pesoIzq+pesoDer);
    
        /* Si el total es 0 o la diferencia es 0 */
        if(total == 0 || difRama == 0)
            return 0;
    
        /* Porcentaje de diferencia */
        return difRama / total;
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

问题是函数总是返回0,任何想法?

JSF*_*JSF 6

该分裂发生之前从隐式转换intfloat.

你需要从一个显式转换intfloat除法之前.

return (float)  difRama / total;
Run Code Online (Sandbox Code Playgroud)

您应该通过运算符优先级规则知道上面的转换应用于difRama除法之前(而不是除法的结果).