2013-08-23 11 views
13

मैं अपने जावा कार्यक्रम में एक हिस्सा आया जहां मुझे निकटतम सौ तक पहुंचने की आवश्यकता थी और सोचा कि शायद ऐसा करने का कोई तरीका है लेकिन मुझे नहीं लगता। तो मैंने उदाहरणों या किसी भी उत्तर के लिए नेट की खोज की और मुझे अभी तक कोई भी खोज नहीं आया है क्योंकि सभी उदाहरण निकटतम सौ के रूप में दिखाई देते हैं। मैं सिर्फ यूपी के आसपास ऐसा करना चाहता हूं। शायद कुछ सरल समाधान है जो मैं देख रहा हूं। मैंने Math.ceil और अन्य फ़ंक्शंस का प्रयास किया है लेकिन अभी तक इसका कोई जवाब नहीं मिला है। अगर कोई इस मुद्दे के साथ मेरी मदद कर सकता है तो मैं इसकी सराहना करता हूं।निकटतम सौ तक पहुंचने के लिए

यदि मेरा नंबर 203 है, तो मैं चाहता हूं कि परिणाम 300 हो जाए। आपको बिंदु मिल गया।

  1. 801-> 900
  2. 99-> 100
  3. 14-> 100
  4. 452-> 500

उत्तर

32

जिनमें से दशमलव भाग ट्रंकेटस पूर्णांक विभाजन का लाभ उठाएं भागफल। इसे गोल करने की तरह दिखने के लिए, पहले 99 जोड़ें।

int rounded = ((num + 99)/100) * 100; 

उदाहरण:

801: ((801 + 99)/100) * 100 → 900/100 * 100 → 9 * 100 = 900 
99 : ((99 + 99)/100) * 100 → 198/100 * 100 → 1 * 100 = 100 
14 : ((14 + 99)/100) * 100 → 113/100 * 100 → 1 * 100 = 100 
452: ((452 + 99)/100) * 100 → 551/100 * 100 → 5 * 100 = 500 
203: ((203 + 99)/100) * 100 → 302/100 * 100 → 3 * 100 = 300 
200: ((200 + 99)/100) * 100 → 299/100 * 100 → 2 * 100 = 200 

प्रासंगिक Java Language Specification quote, Section 15.17.2:

पूर्णांक विभाजन 0. यही है, भागफल ऑपरेंड n और घ कि बाइनरी संख्यात्मक पदोन्नति के बाद पूर्णांक हैं के लिए उत्पादन की ओर फेरे (§5.6.2) एक पूर्णांक मान q है जिसका परिमाण संभवतः जितना संभव हो उतना बड़ा है। D | q | ≤ | एन |

+0

वाह, मैंने कभी इस तरह छंटनी का लाभ लेने का सोचा नहीं। यह जवाब बहुत बढ़िया है। मुझे कुछ सिखाने के लिए बहुत बहुत धन्यवाद! – Tastybrownies

+0

* साइड नोट --- यदि आप 'int' कास्टिंग करने के बजाए फ्लोट पॉइंट मानों के साथ काम कर रहे हैं, तो अधिकांश भाषाएं किसी भी तरह से या किसी अन्य तरीके से 'फर्श फ़ंक्शन' का समर्थन करती हैं। –

+0

@DaSh हां यह काम करता है। निकटतम सौ तक '0' राउंडिंग '0' है, क्योंकि' 0' '100' का निकटतम एकाधिक है, और' ((0 + 99)/100) * 100' -> '99/100 * 100' -> '0 * 100' =' 0'। – rgettman

9

यहां एक एल्गोरिदम है जिसे मैं किसी भी "एकाधिक" मामले के लिए काम करता हूं। आप क्या सोचते हैं मुझे बताओ।

int round (int number,int multiple){ 

    int result = multiple; 

    //If not already multiple of given number 

    if (number % multiple != 0){ 

     int division = (number/multiple)+1; 

     result = division * multiple; 

    } 

    return result; 

} 
+1

धन्यवाद मेरे लिए काम किया। केवल मुझे लगता है कि बदलाव पहली पंक्ति होना चाहिए: int परिणाम = संख्या; – vanval

3
int roundUpNumberByUsingMultipleValue(double number, int multiple) { 

     int result = multiple; 

     if (number % multiple == 0) { 
      return (int) number; 
     } 

     // If not already multiple of given number 

     if (number % multiple != 0) { 

      int division = (int) ((number/multiple) + 1); 

      result = division * multiple; 

     } 
     return result; 

    } 

Example: 
System.out.println("value 1 =" + round(100.125,100)); 
System.out.println("value 2 =" + round(163,50)); 
System.out.println("value 3 =" + round(200,100)); 
System.out.println("value 4 =" + round(235.33333333,100)); 
System.out.println("value 5 =" + round(0,100)); 

OutPut: 
value 1 =200 
value 2 =200 
value 3 =200 
value 4 =300 
value 5 =0 
+0

कोड का केवल एक टुकड़ा पोस्ट करने से बहुत मदद नहीं मिलती है, आपको जवाब देने के लिए कुछ स्पष्टीकरण जोड़ना चाहिए। – mohacs

1

मैं O.C. के जवाब देने के लिए एक टिप्पणी जोड़ने के लिए enought प्रतिष्ठा नहीं है, लेकिन मुझे लगता है कि यह होना चाहिए:,

` 
if (number % multiple != 0) { 
    int division = (number/multiple) + 1; 
    result = division * multiple; 
} else { 
    result = Math.max(multiple, number); 
} 
` 
ताकि else साथ

उदाहरण round(9, 3) = 9 के लिए, अन्यथा यह होगा round(9, 3) = 3

2
long i = 2147483648L; 
if(i % 100 != 0) { 
    long roundedI = (100 - (i % 100)) + i; 
} 

Exa mple:

649: (100 - (649 % 100)) + 649 -> (100 - 49) + 649) -> 51 + 649 = 700 
985: (100 - (985 % 100)) + 985 -> (100 - 85) + 985) -> 15 + 985 = 1000 

लांग डेटाप्रकार यकीन है कि पूर्णांक रेंज की सीमा बड़े मान के लिए किसी भी समस्या का कारण नहीं होना चाहिए बनाने के लिए प्रयोग किया जाता है। पूर्व में, राशि मूल्य (बैंकिंग डोमेन) के मामले में यह बहुत महत्वपूर्ण हो सकता है।

1
A simple implementation of rgettman which gives: 
roudUp(56007)=60000 
roudUp(4511)=5000 
roudUp(1000)=1000 
roudUp(867)=900 
roudUp(17)=20 
roudUp(5)=10 
roudUp(0)=0 


import java.util.*; 

public class Main { 
    static int roundUp(int src){ 
     int len = String.valueOf(src).length()-1; 
     if (len==0) len=1; 
     int d = (int) Math.pow((double) 10, (double) len); 
     return (src + (d-1))/d*d; 
    } 
    public static void main(String[] args) { 
     System.out.println("roudUp(56007)="+roundUp(56007)); 
     System.out.println("roudUp(4511)="+roundUp(4511)); 
     System.out.println("roudUp(1000)="+roundUp(1000)); 
     System.out.println("roudUp(867)="+roundUp(867)); 
     System.out.println("roudUp(17)="+roundUp(17)); 
     System.out.println("roudUp(5)="+roundUp(5)); 
     System.out.println("roudUp(0)="+roundUp(0)); 
    } 
} 
0

एक अन्य तरीके से उपयोग करने BigDecimal

private static double round(double number, int precision, RoundingMode roundingMode) { 
    BigDecimal bd = null; 
    try { 
     bd = BigDecimal.valueOf(number); 
    } catch (NumberFormatException e) { 
     // input is probably a NaN or infinity 
     return number; 
    } 
    bd = bd.setScale(precision, roundingMode); 
    return bd.doubleValue(); 
} 

round(102.23,0,RoundingMode.UP) = 103 
round(102.23,1,RoundingMode.UP) = 102.3 
round(102.23,2,RoundingMode.UP) = 102.24 
round(102.23,-1,RoundingMode.UP) = 110 
round(102.23,-2,RoundingMode.UP) = 200 
round(102.23,-3,RoundingMode.UP) = 1000 
1

इस प्रयास करें है:

(int) (Math.ceil(number/100.0))*100 
0

नीचे कोड मेरे लिए काम करता अगले 10 या 100 या करने के लिए एक पूर्णांक पूर्णांक बनाना 500 या 1000 आदि

public class MyClass { 
    public static void main(String args[]) { 
     int actualValue = 34199; 
     int nextRoundedValue = 500 // change this based on your round requirment ex: 10,100,500,... 
     int roundedUpValue = actualValue; 

     //Rounding to next 500 
     if(actualValue%nextRoundedValue != 0) 
      roundedUpValue = 
(((actualValue/nextRoundedValue)) * nextRoundedValue) + nextRoundedValue; 
     System.out.println(roundedUpValue); 
    } 
} 
संबंधित मुद्दे