2009-08-25 7 views
69

मैं रेटिंग को प्रदर्शित करने के लिए है और उस के लिए मैं वेतन वृद्धि की जरूरत है इस प्रकार है: संख्या 1.0 हैमैं निकटतम 0.5 तक कैसे घूम सकता हूं?

अगर यह है, तो संख्या 1.1 1
बराबर होना चाहिए 1
बराबर होना चाहिए संख्या 1.2 है 1
बराबर होना चाहिए संख्या 1.3 1.5
बराबर होना चाहिए है, तो संख्या 1.4 1.5
बराबर होना चाहिए है, तो संख्या 1.5 1.5
बराबर होना चाहिए संख्या 1.6 होना चाहिए है है 1.5
के बराबर यदि संख्या 1.7 है तो 1.5के बराबर होना चाहिए संख्या 1.8 2.0
बराबर होना चाहिए है, तो संख्या 1.9 2.0
बराबर होना चाहिए है, तो संख्या 2.0 2.0
बराबर होना चाहिए है, तो संख्या 2.1 2.0
बराबर होना चाहिए है और इतने पर ...

क्या आवश्यक मूल्यों की गणना करने का कोई आसान तरीका है?

उत्तर

150

गुणा आपकी रेटिंग 2 से, तो Math.Round(rating, MidpointRounding.AwayFromZero) का उपयोग कर दौर है, तो उस मूल्य 2.

+0

+1 यह सुझाव सही है। –

+0

पूरी तरह से काम करता है !!! धन्यवाद :) –

+5

बाह, अगर मैंने केवल तेज़ी से टाइप किया है, तो –

49

गुणा द्वारा 2 से विभाजित, गोल, फिर 2

से विभाजित करता है, तो आप निकटतम तिमाही चाहते हैं, 4 से गुणा, 4 से विभाजित, आदि

+4

सरल और सही। यही वह है जिसकी तलाश में मैं हूं। धन्यवाद! – Michael

1
decimal d = // your number.. 

decimal t = d - Math.Floor(d); 
if(t >= 0.3d && t <= 0.7d) 
{ 
    return Math.Floor(d) + 0.5d; 
} 
else if(t>0.7d) 
    return Math.Ceil(d); 
return Math.Floor(d); 
0

कई विकल्प हैं। यदि प्रदर्शन एक चिंता है, तो उन्हें देखने के लिए जांचें कि कौन सा बड़े लूप में सबसे तेज़ काम करता है।

double Adjust(double input) 
{ 
    double whole = Math.Truncate(input); 
    double remainder = input - whole; 
    if (remainder < 0.3) 
    { 
     remainder = 0; 
    } 
    else if (remainder < 0.8) 
    { 
     remainder = 0.5; 
    } 
    else 
    { 
     remainder = 1; 
    } 
    return whole + remainder; 
} 
+0

यह काम करना चाहिए, लेकिन यह कुछ समाधानों के रूप में सुरुचिपूर्ण नहीं है। गुणा और सिस्टम लाइब्रेरी का उपयोग करना सिर्फ सेक्सी है। – captncraig

+0

प्रदर्शन आमतौर पर अधिक महत्वपूर्ण है, और यह गुणा और विभाजन समाधान से कम समय ले सकता है। –

+2

यह कोड सही नहीं है। चूंकि युगल के साथ अंकगणित में आमतौर पर कुछ छोटी गोलियां होती हैं, इसलिए 4.8 - 4.0 जैसे ऑपरेशन उदाहरण के लिए 0.7 99 999 दे सकते हैं ...। इस मामले में उपरोक्त कोड 4.5 के आसपास होगा। गणित के बजाय Math.Floor का भी बेहतर उपयोग करना होगा। क्योंकि अभी नकारात्मक संख्याएं गंभीर रूप से गोलाकार नहीं हैं। मैं स्वीकार्य उत्तर पसंद करता हूं, क्योंकि यह कार्यान्वयन त्रुटियों के लिए सरल और कम प्रवण है। – Accipitridae

1

लगता है जैसे आपको निकटतम 0.5 तक घूमने की आवश्यकता है। मुझे सी # एपीआई में round का कोई संस्करण नहीं दिखता है जो ऐसा करता है (एक संस्करण में गोल करने के लिए कई दशमलव अंक होते हैं, जो एक ही चीज़ नहीं है)।

मान लें कि आपको केवल दसवीं की पूर्णांक संख्याओं से निपटना होगा, यह round (num * 2)/2 की गणना करने के लिए पर्याप्त है। यदि आप मनमाने ढंग से सटीक दशमलव का उपयोग कर रहे हैं, तो यह मुश्किल हो जाता है। आइए आशा करते हैं कि आप नहीं करते हैं।

-1

मुझे इस समस्या के साथ भी कठिनाई थी। मुख्य रूप से Actionscript 3.0 में मैं कोड है जो एडोब फ्लैश प्लेटफार्म के लिए आधार कोडिंग है, लेकिन बोली में simularities हैं:

समाधान मैं के साथ आया था निम्नलिखित है: काफी

//Code for Rounding to the nearest 0.05 
var r:Number = Math.random() * 10; // NUMBER - Input Your Number here 
var n:int = r * 10; // INTEGER - Shift Decimal 2 places to right 
var f:int = Math.round(r * 10 - n) * 5;// INTEGER - Test 1 or 0 then convert to 5 
var d:Number = (n + (f/10))/10; // NUMBER - Re-assemble the number 

trace("ORG No: " + r); 
trace("NEW No: " + d); 

Thats यह । 'नंबर' और 'इंटेगर्स' के उपयोग पर ध्यान दें और जिस तरह से उन्हें संसाधित किया जाता है।

शुभकामनाएं!

9

यहां कुछ तरीके दिए गए हैं जो मैंने लिखा है जो हमेशा किसी भी मूल्य पर ऊपर या नीचे जाएगा।

public static Double RoundUpToNearest(Double passednumber, Double roundto) 
{ 
    // 105.5 up to nearest 1 = 106 
    // 105.5 up to nearest 10 = 110 
    // 105.5 up to nearest 7 = 112 
    // 105.5 up to nearest 100 = 200 
    // 105.5 up to nearest 0.2 = 105.6 
    // 105.5 up to nearest 0.3 = 105.6 

    //if no rounto then just pass original number back 
    if (roundto == 0) 
    { 
     return passednumber; 
    } 
    else 
    { 
     return Math.Ceiling(passednumber/roundto) * roundto; 
    } 
} 

public static Double RoundDownToNearest(Double passednumber, Double roundto) 
{ 
    // 105.5 down to nearest 1 = 105 
    // 105.5 down to nearest 10 = 100 
    // 105.5 down to nearest 7 = 105 
    // 105.5 down to nearest 100 = 100 
    // 105.5 down to nearest 0.2 = 105.4 
    // 105.5 down to nearest 0.3 = 105.3 

    //if no rounto then just pass original number back 
    if (roundto == 0) 
    { 
     return passednumber; 
    } 
    else 
    { 
     return Math.Floor(passednumber/roundto) * roundto; 
    } 
} 
0

यह करने के लिए सही तरीका है:

public static Decimal GetPrice(Decimal price) 
      { 
       var DecPrice = price/50; 
       var roundedPrice = Math.Round(DecPrice, MidpointRounding.AwayFromZero); 
       var finalPrice = roundedPrice * 50; 

       return finalPrice; 

      } 
0
Public Function Round(ByVal text As TextBox) As Integer 
    Dim r As String = Nothing 
    If text.TextLength > 3 Then 
     Dim Last3 As String = (text.Text.Substring(text.Text.Length - 3)) 
     If Last3.Substring(0, 1) = "." Then 
      Dim dimcalvalue As String = Last3.Substring(Last3.Length - 2) 
      If Val(dimcalvalue) >= 50 Then 
       text.Text = Val(text.Text) - Val(Last3) 
       text.Text = Val(text.Text) + 1 
      ElseIf Val(dimcalvalue) < 50 Then 
       text.Text = Val(text.Text) - Val(Last3) 
      End If 
     End If 
    End If 
    Return r 
End Function 
+4

यह कोड प्रश्न में वांछित के रूप में सी # की तरह नहीं दिखता है। यह क्या करता है? एक अनिर्दिष्ट भाषा में कोड के केवल एक ढेर के बजाय कृपया कुछ स्पष्टीकरण प्रदान करें। – AdrianHHH