2011-08-25 15 views
20

लौटने मैं एक डबल (23,46)Math.ceil और Math.floor एक ही मूल्य

है और तरीकों Math.ceil और Math.floor का उपयोग करने और इन तरीकों के लिए अपने डबल पार्स करने, मैं एक ही मूल्य के लिए लौट आए मिल मुझे, जो 23 है ...

मैं इसे 24 तक बंद करना चाहता हूं .. दूसरे शब्दों में, यदि मेरे पास 15.01 की दोगुनी है, तो इसे अभी भी 16 तक बंद किया जाना चाहिए ... मैं यह कैसे कर सकता हूं ?

+5

पोस्ट करें दिखा आप कैसे मिल गया Math.ceil (23.46) = 23 प्रतिलिपि प्रस्तुत करने योग्य कोड? – smci

+0

कुछ हद तक इस सवाल से संबंधित है, अगर डबल सटीक खो रहा था, तो छत और मंजिल समान मूल्य प्रिंट कर सकते हैं, उदाहरण के लिए System.out.println ("छत:" + Math.ceil ((1000000000000000000L - 1)/2.0)); System.out.println ("मंजिल:" + Math.floor ((1000000000000000000L - 1)/2.0)); दोनों आपको 5.0E17 प्राप्त करेंगे। – Deep

उत्तर

49

पुन: पेश करने में असमर्थ:

public class Test 
{ 
    public static void main(String[] args) 
    { 
     System.out.println(Math.ceil(23.46)); // Prints 24 
     System.out.println(Math.floor(23.46)); // Prints 23 
    } 
} 

मुझे लगता है कि या तो आप इनपुट डेटा आपको लगता है आपके पास या आप आउटपुट डेटा आपको लगता है कि आप कर रहे हैं बाहर नहीं लिख रहे हैं नहीं मिला है। Math.floor/ceil स्वयं ठीक काम करते हैं। एकमात्र समय वे एक ही मूल्य वापस कर देंगे जब इनपुट पहले से ही एक पूर्णांक है। आप पार्सिंग पार्सिंग के बारे में बात करते हैं ... मेरा अनुमान है कि त्रुटि वहां है। कृपया हमें एक छोटा लेकिन पूरा कार्यक्रम दिखाएं जो समस्या का प्रदर्शन करता है।

(वहाँ जहां सटीक लक्ष्य पूर्णांक वास्तव में एक double के रूप में प्रतिनिधित्व नहीं किया जा सकता बहुत बड़ी मूल्यों के आसपास अन्य परिदृश्यों हो सकता है - मैं जाँच नहीं की है - लेकिन यह है कि निश्चित रूप से मामला यहाँ नहीं है।)

+5

"एकमात्र समय वे एक ही मूल्य वापस कर देंगे जब इनपुट पहले से ही एक पूर्णांक है" यह मेरी समस्या होने के समाप्त हो गया। मेरी तरफ से बेवकूफ गलती, आपकी मदद के लिए धन्यवाद। – Tiwaz89

3

जब मैं चलाने

System.out.println(Math.ceil(23.46)); 
System.out.println(Math.ceil(15.01)); 

मैं

24.0 
16.0 

कि आप क्या चाहते हैं नहीं है?

4
कोड

अपेक्षा के अनुरूप

24.0 
23.0 

तो यह काम करता है:

System.out.println(Math.ceil(23.46)); 
System.out.println(Math.floor(23.46)); 

मेरा पीछा उत्पादन देता है।

3

आप वास्तविक आमंत्रण कैसे करते हैं? मैं डबल ऑब्जेक्ट या आदिम प्रकार का उपयोग करके, अपने परिणाम को दोहराना नहीं कर सकता।

इस कोड:

Double d_object = new Double(23.46); 
    double d_simple = 23.46; 

    System.out.println("Ceiling simple: " + Math.ceil(d_simple)); 
    System.out.println("Floor simple: " + Math.floor(d_simple)); 

    System.out.println("Ceiling object: " + Math.ceil(d_object)); 
    System.out.println("Floor object: " + Math.floor(d_object)); 

मुझे देता है:

Ceiling simple: 24.0 
Floor simple: 23.0 
Ceiling object: 24.0 
Floor object: 23.0 
13
float x = ((float)2346/100); // You should type cast. Otherwise results 23 
Math.ceil(x);     // So Math.ceil(23) is 23 !!! 
           // Here I type cast to float. 
           // So I get the result 24 
संबंधित मुद्दे