2012-08-29 27 views
5

aşağıdaki bit çalışırsanız -0JSTL negatif sıfır

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

alırsınız ama 0'dan doğru söylüyorsa test eğer

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

Nasıl bu karışabilir? Anlamsız gözüküyor, 0 eşittir -0, cebirde bunu kanıtlamıştım ... this post'da bir IEEE referansına işaret ediyorlar ama yine de sorunu çözemiyorum

DÜZENLEME: Teşekkürler Yorum için, kod örneğinde bir hata var. Demo değişkene yuvarlanmış değeri atarım. Ve çıktı 0 değil, ama -0, ben denedim

+0

Sorun nedir? Bir değişkeni -0.04 değerini atadınız ve daha sonra, onu bir ondalık basamağa yuvarlattığınız (bu, çıkış 0,0 olacak). Daha sonra, orijinal değerin -0.04'ün 0,00'den az olup olmadığını test edersiniz. – patros

+1

Kodda bir hata vardı, düzeltildi. Ve 0 çıkış değil, çıktılar -0 – Hartimer

+1

Grup adı olarak 'Negatif Sıfır' için Dib'ler! –

cevap

0

Uzun çekim burada, ama orijinal -0.04 bir dize olarak ayrıştırma çünkü bu mu?

Belki sayı olarak değerlendirmek zorlamak olacağını düşünüyorum hangi bu deneyin:

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

Cevabınız için teşekkür ederiz. Fark etmez, hala üretiyor -0 – Hartimer

0

OK, ben açıklayabilirim düşünüyorum bu sefer: öyle java.text.DecimalFormat bir hata (veya özellik), var Kaput altında <fmt:formatNumber /> ne kullanır.

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

Bu dengeler Kendi sayı biçimlendirme etiketi yazabilirsiniz: Burada

Ben bir deneme olarak çalıştı hızlı bir Beanshell oturumun copy'n'paste olduğunu.

// 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);