2012-08-29 15 views
5

Si intenta el siguiente bit obtendrá -0jstl cero negativo

<c:set var="demo" value="-0.04" /> 
<fmt:formatNumber maxFractionDigits="1" value="${demo}" var="demo" /> 

pero si se prueba si es inferior a 0 se dice que la verdadera

<c:if test="${demo < 0.00}">...</c:if> 

¿Cómo puedo ir alrededor de esto? No parece tener sentido, 0 es igual a -0, tuve que probarlo en álgebra ... En this post apuntan a una referencia IEEE, pero aún así, no puedo resolver el problema

EDITAR: Gracias para el comentario, hay un error en la muestra del código. Asigno el valor redondeado a la variable de demostración. Y la salida no es 0, pero -0, lo intenté

+0

¿Cuál es el problema? Has asignado a una variable un valor de -0.04, y luego lo has sacado, redondeado a un lugar decimal (que dará como resultado 0.0). Luego, prueba si el valor original, -0.04 es menor que 0.00 ... lo cual da como verdadero. – patros

+1

Hubo un error en el código, lo solucionó. Y NO emite 0, salidas -0 – Hartimer

+1

Dibs para 'Negativo cero' como nombre de la banda! –

Respuesta

0

Posibilidad muy remota aquí, pero ¿es porque está analizando el original -0.04 como una cadena?

Tal vez intente esto, que creo que va a obligarlo a evaluar como un número:

<c:set var="demo" value="${-0.04}" /> 
+1

gracias por la respuesta. no hace ninguna diferencia, todavía produce -0 – Hartimer

0

bien, esta vez creo que puedo explicarlo: se trata de un error (o función) de java.text.DecimalFormat, que es lo que <fmt:formatNumber /> usa debajo del capó.

Aquí es una Copy'n'Paste de una sesión rápida Beanshell traté como un experimento:

BeanShell 2.0b4 - by Pat Niemeyer ([email protected]) 
bsh % import java.text.*; 
bsh % fmt = new DecimalFormat(); 
bsh % fmt.setMaximumFractionDigits(1); 
bsh % print(fmt.format(-0.04d)); 
-0 
bsh % 
0

Se puede escribir su propio formato de número de etiquetas que compensa esto.

// Read these values from tag attributes 
String pattern = "0"; 
Double myNumber = -0.04d; 

// Create a decimal format with correct rounding 
DecimalFormat df = new DecimalFormat(pattern); 
df.setRoundingMode(RoundingMode.HALF_UP); 

// Format in two steps to compensate for '-0' 
String temp = df.format(myNumber + 1); 
String formatted = df.format(Double.valueOf(temp) - 1);