2012-08-29 11 views
5

आप निम्नलिखित सा प्रयास करते हैं तो आप मिल जाएगा -0JSTL नकारात्मक शून्य

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

लेकिन अगर आप का परीक्षण करता है, तो कम से कम 0 यह सच कहते हैं

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

मैं इस के चारों ओर जा सकते हैं? यह समझ में नहीं आता है, 0 बराबर -0, मैंने इसे बीजगणित में साबित कर दिया था ... this post में वे एक आईईईई संदर्भ को इंगित करते हैं, लेकिन फिर भी, मैं समस्या को हल नहीं कर सकता

संपादित करें: धन्यवाद टिप्पणी के लिए, कोड नमूना में एक गलती के रूप में। मैं डेमो वैरिएबल को गोलाकार मान असाइन करता हूं। और आउटपुट 0 नहीं है, लेकिन -0, मैंने कोशिश की है

+0

समस्या क्या है? आपने चर को 0.04 का मान दिया है, और फिर आप इसे आउटपुट करते हैं, एक दशमलव स्थान पर गोल (जो आउटपुट 0.0 होगा)। फिर आप परीक्षण करते हैं कि मूल मान, -0.04 0.00 से कम है ... जो सत्य उत्पन्न करता है। – patros

+1

कोड में एक गलती थी, इसे ठीक किया गया। और यह 0 आउटपुट नहीं करता है, आउटपुट -0 – Hartimer

+1

बैंड नाम के रूप में 'नकारात्मक शून्य' के लिए डिब्बे! –

उत्तर

0

यहां बहुत लंबा शॉट है, लेकिन ऐसा इसलिए है क्योंकि यह मूल -0.04 को एक स्ट्रिंग के रूप में पार्स कर रहा है?

हो सकता है कि यह है, जो मुझे लगता है कि एक नंबर के रूप में मूल्यांकन करने के लिए यह बाध्य करेगा प्रयास करें:

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

उत्तर के लिए धन्यवाद। इससे कोई फर्क नहीं पड़ता, यह अभी भी उत्पादन करता है -0 – Hartimer

0

ठीक है, यह समय मुझे लगता है कि मैं इसे समझा सकता: यह java.text.DecimalFormat की एक बग (या सुविधा) है, जो है <fmt:formatNumber /> बोनेट के तहत उपयोग करता है।

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

आप अपनी खुद की संख्या स्वरूपण टैग जो इस क्षतिपूर्ति लिख सकते हैं:

यहां एक त्वरित BeanShell सत्र मैं एक प्रयोग के रूप की कोशिश की की एक copy'n'paste है।

// 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); 
संबंधित मुद्दे