valores solamente saber que programacion positivos positivo pida para números numero negativos negativo los leer imprimir diga determinar como cero algoritmo java floating-point zero

java - solamente - que pida un numero y diga si es positivo o negativo



¿Cómo verifico si un cero es positivo o negativo? (7)

¿Es posible verificar si un float es un cero positivo (0.0) o un cero negativo (-0.0)?

Convertí el float en un String y verifiqué si el primer char era ''-'' , pero ¿hay otras formas?


Cuando un float es negativo (incluidos -0.0 y -inf ), usa el mismo bit de signo que un int negativo. Esto significa que puede comparar la representación entera a 0 , eliminando la necesidad de conocer o calcular la representación entera de -0.0 :

if(f == 0.0) { if(Float.floatToIntBits(f) < 0) { //negative zero } else { //positive zero } }

Eso tiene una ramificación adicional sobre la respuesta aceptada, pero creo que es más legible sin una constante hexadecimal.

Si su objetivo es solo tratar a -0 como un número negativo, podría omitir la afirmación if externa:

if(Float.floatToIntBits(f) < 0) { //any negative float, including -0.0 and -inf } else { //any non-negative float, including +0.0, +inf, and NaN }


Definitivamente no es el mejor enfoque. Verifica la función

Float.floatToRawIntBits(f);

Doku:

/** * Returns a representation of the specified floating-point value * according to the IEEE 754 floating-point "single format" bit * layout, preserving Not-a-Number (NaN) values. * * <p>Bit 31 (the bit that is selected by the mask * {@code 0x80000000}) represents the sign of the floating-point * number. ... public static native int floatToRawIntBits(float value);


El enfoque utilizado por Math.min es similar a lo que Jesper propone pero un poco más claro:

private static int negativeZeroFloatBits = Float.floatToRawIntBits(-0.0f); float f = -0.0f; boolean isNegativeZero = (Float.floatToRawIntBits(f) == negativeZeroFloatBits);


Para negativo:

new Double(-0.0).equals(new Double(value));

Por positivo:

new Double(0.0).equals(new Double(value));


Puede usar Float.floatToIntBits para convertirlo a un int y observar el patrón de bits:

float f = -0.0f; if (Float.floatToIntBits(f) == 0x80000000) { System.out.println("Negative zero"); }


Sí, divídelo 1 / +0.0f es +Infinity , pero 1 / -0.0f es -Infinity . Es fácil descubrir cuál es con una simple comparación, por lo que obtienes:

if (1 / x > 0) // +0 here else // -0 here

(Esto supone que x solo puede ser uno de los dos ceros)


Double.equals distingue ± 0.0 en Java. (También hay Float.equals ).

Estoy un poco sorprendido de que nadie haya mencionado esto, ya que me parece más claro que cualquier otro método dado hasta ahora.