2011-09-23 13 views
5
BigDecimal bd= new BigDecimal("00.0000000000"); 
//now bd format to 0E-10 
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10")) 
{ 
flag=true; 
} 

वहाँ उपरोक्त कोड में दोनों समस्याओंBigDecimal समस्या जावा में

  1. क्यों चर bd स्वचालित रूप से अगर हालत परिणाम झूठे मूल्य 0E-10
  2. को स्वरूपित, यह यानी हैं के अंदर ब्लॉक दर्ज नहीं है।

कोई भी सुझाव दे सकता है। धन्यवाद

उत्तर

12

आप दशमलव बिंदु के बाद निर्माता दस अंक दे दिया है, तो भले ही उन सभी को शून्य कर रहे हैं, BigDecimal अपने आंतरिक scale 10 इस "0E-10" में -10 बताते हैं स्थापित करने के लिए फैसला किया है।

equals के रूप में, Javadoc says:

इस BigDecimal समानता के लिए निर्दिष्ट Object साथ तुलना करता है। compareTo के विपरीत, यह विधि दो BigDecimal वस्तुओं को पर मानती है, यदि वे मूल्य और स्केल के बराबर हैं (इस प्रकार 2.0 इस विधि की तुलना में 2.00 के बराबर नहीं है)।

निष्कर्ष: किसी

  1. उपयोग compareTo() बजाय equals()
  2. सीधे BigDecimal से String की तुलना न करें क्योंकि यह काम नहीं करेगा।
5

आप

bd.signum() == 0 

BigDecimal.equals का उपयोग कर शून्य के लिए परीक्षण कर सकते हैं भी पैमाने में शामिल हैं (जो आपके मामले में 10 है) और इस तरह विफल रहता है। BigDecimals की तुलना करने के लिए सामान्य रूप से आपको compareTo का उपयोग करना चाहिए।

1

बिगडेसिमल 10 के पैमाने का उपयोग करता है क्योंकि आपने दशमलव बिंदु के बाद इसे दस अंक दिए हैं, जो आपके पहले बिंदु का उत्तर देते हैं।

यदि पहले भाग के लिए, आप 00.00000000000 के साथ 0 की तुलना कर रहे हैं (स्केल अलग है, इसलिए वे समान नहीं हैं)। दूसरे में, आप एक बिगडिसीमल के साथ एक स्ट्रिंग की तुलना कर रहे हैं। जो काम नहीं करेगा।

संबंधित मुद्दे