2013-10-27 4 views
19

मैं यूपी को एक int में डबल कैसे कर सकता हूं, और इसे कभी भी नीचे नहीं चला सकता। मुझे Math.round(double) पता है, लेकिन मैं हमेशा इसे गोल करना चाहता हूं। तो यदि यह 3.2 था, तो यह 4 से 0 हो गया।हमेशा यूपी को एक डबल

क्या यह संभव है?

+8

'Math.ceil' - अगर आपको भविष्य में इस तरह की कोई समस्या है तो आप प्रासंगिक पुस्तकालय के जेनरेट किए गए जावाडोक को पढ़ सकते हैं। इस मामले में गणित –

+0

भले ही आप आरटीएफएम की तरह महसूस न करें, 'Math.round (yourNum + 0.5)' काम करता है। – nhgrif

+1

@nhgrif '0.0' के बराबर नहीं है '1' तक गोल किया जाएगा यह गोलाकार और जोड़ना जैसा ही है। –

उत्तर

26

आप Math.ceil() विधि का उपयोग कर सकते हैं।

देखें JavaDoc लिंक:

प्लस्तर लगाना

public static double ceil(double a) 

छोटी (नकारात्मक अनन्तता के लिए निकटतम) डबल मूल्य की तुलना में अधिक या बराबर है रिटर्न: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#ceil-double-

डॉक्स से

तर्क और गणितीय पूर्णांक के बराबर है। विशेष मामले:

  • यदि तर्क मान पहले से ही गणितीय पूर्णांक के बराबर है, तो परिणाम तर्क के समान है।
  • यदि तर्क NaN या अनंत या सकारात्मक शून्य या नकारात्मक शून्य है, तो परिणाम तर्क के समान है।
  • यदि तर्क मान शून्य से कम है लेकिन -1.0 से अधिक है, तो परिणाम ऋणात्मक शून्य है।

ध्यान दें कि Math.ceil (x) का मान बिल्कुल -ath.floor (-x) का मान है।

पैरामीटर:

  • एक - एक मूल्य।

रिटर्न:

छोटी (नकारात्मक अनंत को निकटतम) फ़्लोटिंग-बिंदु मान तुलना में अधिक या तर्क के बराबर है और एक गणितीय पूर्णांक के बराबर है।

+0

यदि आप लिंक से उद्धरण दे सकते हैं, तो यह लोगों को स्टैक ओवरफ़्लो पर संपूर्ण उत्तर खोजने में सहायता करता है। –

+0

@ZacharyVance – rpax

+0

_ceil_ एक _double_ देता है, उसने _int_ –

-2

Math.ceil() अगर आप चाहते हैं यह सबसे बड़ा निकटतम मान पूर्ण होना आप Math.floor()

+1

यह सामने है। – EJP

-2

Math.ceil

सार्वजनिक स्थैतिक डबल प्लस्तर लगाना का उपयोग करना चाहिए आप निकटतम न्यूनतम मूल्य दे देंगे (डबल क)

सबसे छोटा (नकारात्मक अनंतता के निकटतम) डबल मान जो तर्क से अधिक या बराबर है और गणितीय पूर्णांक के बराबर है। विशेष मामले:

0
private int roundUP(double d){ 
    double dAbs = Math.abs(d); 
    int i = (int) dAbs; 
    double result = dAbs - (double) i; 
    if(result==0.0){ 
     return (int) d; 
    }else{ 
     return (int) d<0 ? -(i+1) : i+1;   
    } 
} 

अच्छी नौकरी!;)

7

सरल शब्दों में,

  • Math.ceil हमेशा दौर यूपी या जैसा कि ऊपर कहा, अतिरिक्त में।
  • Math.round दशमलव के आधार पर ऊपर या नीचे जाएगा।
    • दशमलव बराबर या इससे अधिक से अधिक 5 है, तो यह को गिरफ्तार है।
      • दशमलव => 5. (1,5 = 2)
    • दशमलव कम से कम 5 है, तो यह पूर्णांक है।
      • दशमलव Math.ceil और Math.round की < 5. (1,45 = 1)

उदाहरण:

कोड नीचे वापसी होगी:
लागत, प्लस्तर लगाना 2.2 के बिना और सेइल 3 (int), 3.0 (डबल) के साथ। हम इसे दौर हैं: 2

int m2 = 2200; 
    double rate = 1000.0; 

    int costceil = (int)Math.ceil(m2/rate); 
    double costdouble = m2/rate; 
    double costdoubleceil = Math.ceil(m2/rate); 
    int costrounded = (int)Math.round(m2/rate); 
    System.out.println("Cost, without Ceil "+costdouble+" and with Ceil "+ 
      costceil+"(int), "+costdoubleceil+"(double). If we round it: "+costrounded); 

हम करने के लिए एम 2 का मूल्य बदलते हैं, तो उदाहरण के लिए, परिणाम होगा: लागत, प्लस्तर लगाना 2.499 बिना और प्लस्तर लगाना 3 (पूर्णांक), 3.0 (डबल) के साथ । यदि हम इसे गोल करते हैं: 2
यदि हम के लिए एम 2 के मान को बदलते हैं, तो परिणाम होगा:
लागत, बिना छील 2.55 और सीइल 3 (int), 3.0 (डबल) के साथ। यदि हम इसे गोल करते हैं: 3

उम्मीद है कि यह मदद करता है। (पिछले उत्तरों से निकाली गई जानकारी, मैं बस इसे स्पष्ट करना चाहता था)।

0

मेरी विधि अपेक्षाकृत सरल है, उम्मीद है कि यह आपके लिए काम करेगी।

मेरे मामले में मेरे पास ऑब्जेक्ट्स की एक पंक्ति है जो केवल 3 आइटम रख सकती है और मुझे वस्तुओं को समायोजित करने के लिए पंक्तियों की संख्या को समायोजित करना होगा।

तो मेरे पास कुछ डबल नंबरऑफरो हैं, फिर मैं नंबरऑफरो के लिए int मान प्राप्त करने के लिए numberOfRows.intValue() का उपयोग करता हूं।

यदि मुझे प्राप्त होने वाला int मान संख्या से कम है IFROows, मैं इसे जोड़ने के लिए संख्या 1 को जोड़ता हूं, अन्यथा मैं संख्या से प्राप्त मूल्य OfRows.intValue() वह उत्तर है जो मैं चाहता हूं। Math.ceil() का उपयोग किए बिना

for(int numberOfItems = 0; numberOfItems < 16; numberOfItems++) { 
     Double numberOfRows = numberOfItems/3.0; 

     System.out.println("Number of rows are: " + numberOfRows); 
     System.out.println("Number of items are: " + numberOfItems); 
     if(numberOfRows.intValue() < numberOfRows) { 
      System.out.println("int number of rows are: " + (numberOfRows.intValue() + 1)); 
     } 
     else { 
      System.out.println("int value of rows are: " + numberOfRows.intValue()); 
     } 
     System.out.println(); 
     System.out.println(); 
    } 
0

लघु उदाहरण:

मैं पाश इसे बाहर का परीक्षण करने के लिए इस सरल लिखा था।

public double roundUp(double d){ 
    return d > (int)d ? (int)d + 1 : d; 
} 

Exaplanation: संकार्य की तुलना समान किरदार का उपयोग कर, अगर अधिक लाभ नीचे तर्क +1 (साधन को ख़त्म कर) और अपरिवर्तित संकार्य गोल संकार्य पूर्णांक के लिए। स्यूडोकोड

double x = 3.01 
int roundDown = (int)x // roundDown = 3 
if(x > roundDown)  // 3.01 > 3 
    return roundDown + 1 // return 3.0 + 1.0 = 4.0 
else 
    return x    // x equals roundDown 

में

उदाहरण वैसे भी आप Math.ceil() उपयोग करना चाहिए। यह केवल एक साधारण उदाहरण है कि आप इसे अपने आप कैसे कर सकते हैं।

0

tl; डॉ

BigDecimal("3.2").setScale(0 , RoundingMode.CEILING) 

BigDecimal

आप accuracy rather than performance चाहते हैं, floating point प्रौद्योगिकी से बचें। इसका मतलब है float, Float, double, Double से परहेज करना। सटीकता के लिए, BigDecimal कक्षा का उपयोग करें।

BigDecimal, set the scale पर, दशमलव स्थान के दाईं ओर अंकों की संख्या। यदि आप कोई दशमलव अंश नहीं चाहते हैं, तो स्केल को शून्य पर सेट करें। और rounding mode निर्दिष्ट करें। हमेशा एक अंश को ऊपर की ओर जाने के लिए, RoundingMode.CEILING का उपयोग करें,

सकारात्मक अनंतता की ओर गोल करने के लिए गोल करने का तरीका। यदि परिणाम सकारात्मक है, RoundingMode.UP के रूप में व्यवहार करता है; अगर नकारात्मक है, RoundingMode.DOWN के रूप में व्यवहार करता है। ध्यान दें कि यह गोल करने वाला मोड गणना मूल्य को कभी कम नहीं करता है। उदाहरण के लिए, 1.1 2 हो जाता है, और अपने 3,2 4.

BigDecimal bd = new BigDecimal("3.2") ; 
BigDecimal bdRounded = bd.setScale(0 , RoundingMode.CEILING) ; 
String output = bdRounded.toString() ; 
System.out.println("bdRounded.toString(): " + bdRounded) ; // 4 

इस code run live at IdeOne.com देखें बन जाता है।

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