¿Por qué la división devuelve cero?

Resuelto Roch asked hace 15 años • 7 respuestas

Aquí está el código que estoy usando en el ejemplo:

 PRINT @set1
 PRINT @set2

 SET @weight= @set1 / @set2;
 PRINT @weight

Aquí está el resultado:

47
638
0

Me gustaría saber por qué regresa 0en lugar de0,073667712

Roch avatar Nov 03 '09 17:11 Roch
Aceptado

Declare set1 y set2 como flotantes en lugar de números enteros o conviértalos en flotantes como parte del cálculo:

SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
Martin avatar Nov 03 '2009 10:11 Martin

Cuando usas solo números enteros en una división, obtendrás una división entera. Cuando usas (al menos uno) double o float, obtendrás una división en punto flotante (y la respuesta que deseas obtener).

Así que puedes

  1. declarar una o ambas variables como flotante/doble
  2. convierta una o ambas variables a flotante/doble.

No se limite a convertir el resultado de la división entera en doble: la división ya se realizó como división entera, por lo que los números detrás del decimal ya se pierden.

Hans Kesting avatar Nov 03 '2009 10:11 Hans Kesting

Simplemente multiplica la parte inferior de la división por 1,0 (o tantos decimales como quieras)

PRINT @set1 
PRINT @set2 
SET @weight= @set1 / @set2 *1.00000; 
PRINT @weight
HLGEM avatar Nov 03 '2009 15:11 HLGEM

Porque es un número entero. Debe declararlos como números de punto flotante o decimales, o convertirlos en tales en el cálculo.

 avatar Nov 03 '2009 10:11