Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una expresión de división de enteros se ha convertido implícitamente a un tipo de punto flotante.
La división se lleva a cabo mediante operaciones de enteros, que truncan la parte fraccionaria antes de que se asigne al tipo de resultado de punto flotante. Esta comprobación no siempre indica un error, porque a veces el truncamiento es intencionado.
En Visual Studio 2022, la comprobación lnt-integer-float-division
se controla mediante la opción Resultado de la división truncada en las opciones de Estilo de código de C/C++. Para obtener información sobre cómo cambiar esta configuración, consulte Configuración del linter.
En Visual Studio 2019, la comprobación lnt-integer-float-division
se controla mediante la opción División entera convertida en número de punto flotante en las opciones de Estilo de código de C/C++. Para obtener información sobre cómo cambiar esta configuración, consulte Configuración del linter.
Ejemplos
float divide(int i, int j) {
return i / j; // Flagged: The integer division result is implicitly cast to float.
}
float half(int i) {
return i / 2; // Flagged: An integer literal is used.
}
Solución del problema
La corrección que sugiere el linter es convertir explícitamente uno de los operandos de la división en un tipo de punto flotante de modo que no se trunque el resultado de la división. También puede usar un literal de punto flotante en lugar de una conversión.
float divide(int i, int j) {
return static_cast<float>(i) / j;
}
float half(int i) {
return i / 2.0;
}
Comentarios
Si el truncamiento es intencionado, puede agregar una conversión explícita para evitar la advertencia.
float int_divide(int i, int j) {
return static_cast<float>(i / j); // Not flagged because of the explicit cast.
}
Consulte también
Información general sobre el linter de código IntelliSense para C++