2012-08-29 36 views
5

Nếu bạn thử chút sau bạn sẽ nhận được -0JSTL tiêu cực zero

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

nhưng nếu bạn kiểm tra nếu nhỏ hơn 0 nó nói đúng

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

Làm thế nào tôi có thể đi xung quanh này? Nó có vẻ không có ý nghĩa, 0 bằng -0, tôi đã chứng minh nó trong đại số ... Trong this post họ trỏ đến một tham chiếu IEEE, nhưng vẫn còn, tôi không thể giải quyết vấn đề

EDIT: Cảm ơn cho nhận xét, có lỗi trong mẫu mã. Tôi gán giá trị làm tròn cho biến demo. Và đầu ra không phải là 0, nhưng -0, tôi đã thử nó

+0

Sự cố là gì? Bạn đã gán một biến một giá trị là 0,04, và sau đó bạn xuất nó, làm tròn đến một chữ số thập phân (sẽ xuất ra 0,0). Sau đó, bạn kiểm tra nếu giá trị ban đầu, -0.04 nhỏ hơn 0.00 ... cho kết quả đúng. – patros

+1

Đã xảy ra lỗi trong mã, hãy sửa nó. Và nó KHÔNG xuất ra 0, xuất ra -0 – Hartimer

+1

Dibs cho 'Negative Zero' làm tên ban nhạc! –

Trả lời

0

Bắn dài ở đây, nhưng có phải vì nó phân tích cú pháp gốc -0.04 dưới dạng chuỗi không?

Có lẽ thử loại này, mà tôi nghĩ sẽ buộc nó để đánh giá như một số:

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

cảm ơn bạn đã trả lời. nó không tạo ra sự khác biệt, nó vẫn tạo ra -0 – Hartimer

0

OK, lần này tôi nghĩ tôi có thể giải thích nó: đó là một lỗi (hoặc tính năng) của java.text.DecimalFormat, đó là những gì <fmt:formatNumber /> sử dụng dưới nắp ca-pô.

Đây là một copy'n'paste của một phiên Beanshell nhanh chóng tôi đã cố gắng như một thí nghiệm:

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

Bạn có thể viết định dạng số của bạn thẻ riêng mà đền bù này.

// 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); 
Các vấn đề liên quan