2013-04-22 7 views
12

नमस्ते वहाँ मैं कंप्यूटिंग सिस्टम डेवलपमेंट के अपने पहले वर्ष में हूं इसलिए मैं जावा के लिए काफी नया हूं और मूल बातें पकड़ रहा हूं!जावा डबल .MAX_VALUE?

मेरी पहली असाइनमेंट के लिए मुझे गैस कंपनी के लिए एक गैस मीटर प्रणाली बनाना है ताकि कर्मचारियों को नए मूल्यवान खाते बनाने और नाम और इकाई लागत जैसे डेटा को उनके खाते से पैसे लेने (जमा करने) के साथ संशोधित करने की अनुमति मिल सके।

मैंने अपना कन्स्ट्रक्टर बनाया है और ओवरलोडिंग की विधि में भी जोड़ा है, हालांकि मैं वर्तमान में एक समस्या में भाग रहा हूं जब मैंने अपनी विधियों में से एक को शुरू किया है, तो मैंने जमा किया है, यह अन्य उपयोगकर्ताओं के खाते से पैसे लेना है रिकॉर्डUnits कर्मचारी को गैस मीटर पढ़ने का आयात करने की अनुमति देता है कि ग्राहक ने कितनी इकाइयों का उपयोग किया है और उन ग्राहकों के खाते की शेष राशि अपडेट की है जो अनिवार्य रूप से ग्राहक के पास कंपनी का क्या है।

जब सिर्फ पूर्व निर्धारित जानकारी के साथ कार्यक्रम का परीक्षण जब जमा विधि आरंभ करने के लिए कोशिश कर रहा है मैं इस

Account.deposit(Double.MAX_VALUE); 

मैं भी यकीन है कि इसका क्या मतलब है और यह अतीत होने का वैसे भी खोजने के लिए नहीं कर पा रहे नहीं हूँ! क्षमा करें अगर यह पोस्ट किया गया है हालांकि मैंने उचित उत्तर के लिए कोई फायदा नहीं लिया है।

परीक्षण डेटा और कोड नीचे देखी गई:

public class TestGasAccount 

{ 
    public static void main (String [] args) 
    { 
     GasAccount Account = new GasAccount (223,"Havana","TQ",1000); 


     Account.getAccNo(); 
     Account.getName(); 
     Account.getAddress(); 
     Account.getUnits(); 
     Account.getBalance(); 
     Account.recordUnits(1000); 
     Account.getUnits(); 
     Account.getBalance(); 
     Account.deposit(Double.MAX_VALUE); 
    } 
} 

तोड़

public class GasAccount 
{ 
    private int intAccNo; 
    private String strName; 
    private String strAddress; 
    private double dblBalance; 
    private double dblUnits; 
    protected double dblUnitCost = 0.02; 

    public GasAccount(int intNewAccNo,String strNewName,String strNewAddress,double dblNewUnits) 
    { 
     intAccNo = intNewAccNo; 
     strName = strNewName; 
     strAddress = strNewAddress; 
     dblUnits = dblNewUnits; 
     dblBalance = dblNewUnits * dblUnitCost; 
    } 

    public GasAccount (int intNewAccNo, String strNewName, String strNewAddress) 
    { 
     intAccNo = intNewAccNo; 
     strName = strNewName; 
     strAddress = strNewAddress; 
    } 

    public double deposit (Double dblDepositAmount) 
    { 
     dblBalance = dblBalance - dblDepositAmount; 
     return dblBalance; 
    } 

    public String recordUnits (double dblUnitsUsed) 
    { 
     double dblTempBalance; 

     dblTempBalance = dblUnitsUsed * dblUnitCost; 
     dblBalance = dblBalance + dblTempBalance; 
     dblUnits = dblUnits + dblUnitsUsed; 

     return "Transaction Successful"; 
    } 

    public int getAccNo() 
    { 
     System.out.println(intAccNo); 
     return intAccNo; 
    } 

    public String getName() 
    { 
     System.out.println(strName); 
     return strName; 
    } 

     public String getAddress() 
    { 
     System.out.println(strAddress); 
     return strName; 
    } 

    public double getBalance() 
    { 
     System.out.println("£"+dblBalance); 
     return dblBalance; 
    } 

    public double getUnitCost() 
    { 

     return dblUnitCost; 
    } 

    public double getUnits() 
    { 
     System.out.println(dblUnits); 
     return dblUnits; 
    } 

    public void updateUnitCost (double dblNewUnitCost) 
    { 
     dblUnitCost = dblNewUnitCost; 

    } 

} 

यह सिर्फ मेरी कोड के नंगे हड्डियों है मैं जाने के लिए भी बहुत कुछ है, लेकिन यह उम्मीद है कि आप एक विचार दे देंगे ।

अग्रिम

+1

यह स्पष्ट नहीं है कि क्या वास्तविक समस्या है। आप किस समझ में नहीं आते? क्या आपने Double.MAX_VALUE के लिए प्रलेखन देखा है? –

+0

मैं कर्मचारी कितना वे बाहर ले जाना चाहते का एक विकल्प देने के लिए कोशिश कर रहा हूँ, लेकिन यह मुझे उस में कोई विशेष मूल्य डाल सिर्फ अभ्यस्त यह पहचान करने के लिए अनुमति नहीं है। मुझे यकीन नहीं है कि मैं इसके आसपास कैसे काम करूंगा। –

+1

मैं अपने खाते के लिए पसंद किया है होगा तेज जबाब NPKR आप संभवतः अधिक विस्तार मैं इस सब के साथ भी परिचित नहीं हूँ में जा सकते हैं के लिए Double.MAX_Value जमा किया जा :( –

उत्तर

16

Double.MAX_VALUE अधिकतम मूल्य एक डबल प्रतिनिधित्व कर सकता है (कहीं लगभग 1.7 * 10^308)।

यदि आप डेटा प्रकार के अधिकतम संभव मूल्य को घटाने का प्रयास करते हैं, तो यह कुछ गणना समस्याओं में समाप्त होना चाहिए।

भले ही आप पैसे से निपट रहे हों, आपको कभी भी फ़्लोटिंग पॉइंट वैल्यू का उपयोग नहीं करना चाहिए, विशेष रूप से गोल करने से समस्याएं हो सकती हैं (आपको या तो अपने सिस्टम में बहुत कम पैसा होगा)।

+0

आप सिर के लिए धन्यवाद मैं गणना समस्याओं के बारे में पता नहीं था! मैं दस्तावेज़ पर ध्यान दिया है इसके बारे में समझ बनाने के लिए मैं दुर्भाग्य से गणितीय नहीं कर रहा हूँ कोशिश कर रहा कुछ की तरह उपहार दिया गया है इसलिए मुझे समझना मुश्किल है! मैं एक काम खोजने की कोशिश कर रहा हूं क्योंकि यह किसी भी मूल्य को स्वीकार नहीं करेगा जब तक कि मैं 100 के बजाय 0.100 नहीं डालता। मैं अन्य दा देख रहा हूं टा प्रकारों का उपयोग करने के लिए बड़े दशमलव जैसे कि इस प्रकार के साथ कोई अनुभव नहीं है। –

+0

कभी 100 के बजाय 100.0 का उपयोग करने की कोशिश की (यह जावा में कोई समस्या नहीं होनी चाहिए)। आप किस आईडीई या कंपाइलर का उपयोग कर रहे हैं? Btw आप अपने कोड में टिप्पणियाँ का उपयोग करना चाहिए;) – Kuchi

+0

धन्यवाद फिर से Kuchi मैं मदद मैं भी इसके बारे में मुझे कैसे मूर्ख के आसपास इस तरह नहीं लगता था कि सराहना करते हैं। वैसे भी यह निश्चित रूप से अभी भी करना होगा! दया पीएस: अनुस्मारक के लिए धन्यवाद मैंने थोड़ा धोखा दिया और बाद में टिप्पणियां जोड़ने का फैसला किया;) मैं वर्तमान में नेट बीन्स का नवीनतम संस्करण –

1

में धन्यवाद कहा गया है कि इस Account.deposit(Double.MAX_VALUE); यह अधिकतम मूल्य Double की dataType.to परीक्षण चलाने के लिए procced को जमा मूल्य स्थापित कर रही है।

+0

धन्यवाद! बात मैं कोशिश कर रहा हूँ है कर्मचारी वे कितना बाहर करना चाहते हैं के एक विकल्प दे, लेकिन उदाहरण के लिए कहते हैं कि मैं £ 10 बाहर निकालने के लिए यह मुझे डाल करने के लिए है कि में या किसी अन्य मूल्य की अनुमति नहीं है की कोशिश की सुविधा देता है! मैं इस तरह के रूप में एक अलग चर प्रकार का उपयोग पर विचार पूर्णांक हालांकि कि व्यवहार्य के रूप में यह धन और दशमलव के साथ काम कर रहा है नहीं होगा! –

5

यहां मृतकों का पुनरुत्थान, लेकिन अगर किसी के खिलाफ इस तरह के खिलाफ ठोकर खाती है। मैं जानता हूं कि डबल का अधिकतम मूल्य कहां प्राप्त करें, (अधिक) दिलचस्प हिस्सा यह था कि वे उस नंबर पर कैसे पहुंचे।

डबल में 64 बिट हैं। पहला संकेत के लिए आरक्षित है।

अगला 11 एक्सपोनेंट का प्रतिनिधित्व करता है (जो कि 1023 पक्षपातपूर्ण है)। यह सकारात्मक/नकारात्मक मूल्यों का प्रतिनिधित्व करने का एक और तरीका है। यदि 11 बिट्स हैं तो अधिकतम मान 1023 है।

फिर 52 बिट्स हैं जो मंटिसा धारण करते हैं।

यह आसानी से उदाहरण के लिए इस तरह की जाती है:

public static void main(String[] args) { 

    String test = Strings.repeat("1", 52); 

    double first = 0.5; 
    double result = 0.0; 
    for (char c : test.toCharArray()) { 
     if (c == '1') { 
      result += first; 
     } 
     first = first/2; 
    } 

    System.out.println(result); // close approximation of 1 
    System.out.println(Math.pow(2, 1023) * (1 + result)); 
    System.out.println(Double.MAX_VALUE); 

} 

तुम भी उलटे क्रम में यह साबित कर सकते हैं:

String max = "0" + Long.toBinaryString(Double.doubleToLongBits(Double.MAX_VALUE)); 

    String sign = max.substring(0, 1); 
    String exponent = max.substring(1, 12); // 11111111110 
    String mantissa = max.substring(12, 64); 

    System.out.println(sign); // 0 - positive 
    System.out.println(exponent); // 2046 - 1023 = 1023 
    System.out.println(mantissa); // 0.99999...8 
संबंधित मुद्दे