2013-02-08 32 views
16

इस साधारण प्रोग्राम चल रहा है:नया बिगडिसीमल ("0.0") क्यों होता है। स्ट्रिप ट्रायलिंग जेरोस() का स्तर 1 है?

public static void main(final String... args) 
{ 
    System.out.println(BigDecimal.ZERO.scale()); 
    System.out.println(new BigDecimal("0").scale()); 
    System.out.println(new BigDecimal("0.0").stripTrailingZeros().scale()); 
    System.out.println(new BigDecimal("1.0").stripTrailingZeros().scale()); 
} 

आउटपुट:

0 
0 
1 
0 

मेरा प्रश्न नहीं बल्कि सरल है: क्यों नहीं देता है तीसरे println उत्पादन 0? यही कारण है कि तार्किक प्रतीत होता है ...

संपादित: ठीक है, इसलिए, यह एक बहुत पुरानी बग है:

Bug Link

और वास्तव में, यह शून्य के किसी भी संख्या के लिए "काम": new BigDecimal("0.0000").stripTrailingZeroes().scale() 4 है!

+1

(http://stackoverflow.com/questions/5239137/clarification-on-behavior-of-bigdecimal-striptrailingzeroes) [BigDecimal.stripTrailingZeroes() के व्यवहार पर स्पष्टीकरण] के संभावित डुप्लिकेट –

+2

प्रश्न एंड्रयू को जोड़ने है वास्तव में वही है, लेकिन ध्यान रखें कि स्वीकृत उत्तर गलत है। आपके द्वारा देखे जाने वाले व्यवहार में अन्य उत्तर में वर्णित बग है: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6480539 – jarnbjo

उत्तर

8

वास्तव में "0.0" अपवाद है क्योंकि इसमें कोई स्ट्रिप ट्रायलिंगज़रो नहीं है। एक बग!

public static void main(final String... args) { 
    p("0"); 
    p("0.0"); 
    p("1.0"); 
    p("1.00"); 
    p("1"); 
    p("11.0"); 
} 

private static void p(String s) { 
    BigDecimal stripped = new BigDecimal(s).stripTrailingZeros(); 
    System.out.println(s + " - scale: " + new BigDecimal(s).scale() 
     + "; stripped: " + stripped.toPlainString() + " " + stripped.scale()); 
} 

0 - scale: 0; stripped: 0 0 
0.0 - scale: 1; stripped: 0.0 1 
1.0 - scale: 1; stripped: 1 0 
1.00 - scale: 2; stripped: 1 0 
1 - scale: 0; stripped: 1 0 
11.0 - scale: 1; stripped: 11 0 

जावा 8 में फिक्स्ड! @ vadim_shb की टिप्पणी देखें।

+4

यह ज्ञात बग है: http://bugs.sun.com/bugdatabase/ view_bug.do?bug_id=6480539 –

+1

@AaronDigulla lol, 2006 से बग। और केवल 'जावा 8' में तय किया जाएगा। – Andremoniy

+3

@Andremoniy: इस पर भरोसा न करें ;-) –