2009-08-25 6 views
6

हाय दूर नंबरों की गोलाई मैं इस तरह डबल संख्या पूर्णांक बनाना (शून्य से दूर) C++ हैं:C++ से शून्य

4.2 ----> 5 
    5.7 ----> 6 
-7.8 ----> -8 
-34.2 ----> -35 

यह करने के लिए कारगर तरीका क्या है?

+1

(मूल) शीर्षक "सी ++ डबल से:

double customRound(double value) const { return value < 0 ? floor(value) : ceil(value); } 

एक बेहतर समाधान लेख में वर्णित है, जो एक टेम्पलेट का उपयोग करता है: आपकी समस्या का आसान समाधान कुछ इस तरह होना चाहिए राउंडिंग ", मैंने सोचा था कि आप दो बार गोल करने का मतलब रखते हैं, बस यह सुनिश्चित करने के लिए :-) – paxdiablo

+0

आप सही हैं: संपादन के लिए डी thx – Emre

उत्तर

25
inline double myround(double x) 
{ 
    return x < 0 ? floor(x) : ceil(x); 
} 

the article Huppie cites में उल्लेख किया है, यह सबसे अच्छा

देखें http://en.cppreference.com/w/cpp/numeric/math/floor और http://en.cppreference.com/w/cpp/numeric/math/floor

या पैक्स के लिए धन्यवाद कि सभी नाव प्रकार भर में काम करता है एक टेम्पलेट के रूप में व्यक्त है , एक गैर-फ़ंक्शन संस्करण:

x = (x < 0) ? floor(x) : ceil(x); 
+0

धन्यवाद – Emre

+0

अच्छा कॉल, @ रूबेन ने एक गैर-फ़ंक्शन संस्करण जोड़ा और आपको वोट दिया। आशा है कि आपको बुरा लगेगा (संपादन, यानी, जाहिर है कि आप वोट को ध्यान में रखते हैं)। – paxdiablo

+0

खुद को 3k की प्रतीक्षा कर रहा है - एक इनलाइन विनिर्देशक में जोड़ा गया - मैं एक अच्छा नाम खोजने की कोशिश करता हूं और इसे सभी प्रयोगों के लिए एक टेम्पलेट के रूप में उपयोग lib में चिपकाता हूं - इससे कोई दक्षता नहीं होगी और आपको जल्दी से अनुमति मिल जाएगी –

-1

कोशिश

double rounded = _copysign(ceil(abs(x)), x); 
+0

नकारात्मक लोगों के लिए काम नहीं करता –

+0

लेकिन मेरा मान -3.4 है तो छत बड़ा पूर्णांक मान देता है और मैं 0.5 जोड़ता हूं यह -2.9 होगा और छत वापस आ जाएगी -2 मुझे कुछ बनाना है -4 – Emre

+1

छत (x + 0.5) के लिए आर एक्स = 5.7 6 की बजाय 7 उत्पन्न करेगा, है ना? – samuil

2

CPlusPlus.com पर इसी तरह की समस्या के बारे में एक अच्छा लेख है।

//-------------------------------------------------------------------------- 
// symmetric round up 
// Bias: away from zero 
template <typename FloatType> 
FloatType ceil0(const FloatType& value) 
{ 
    FloatType result = std::ceil(std::fabs(value)); 
    return (value < 0.0) ? -result : result; 
} 
+1

क्यों नहीं है यह customFloor कहा जाता है - यह है न: पी –

+0

मैं उद्धृत लेख में देख template FloatType ceil0(const FloatType& value) { FloatType result = std::ceil(std::fabs(value)); return (value < 0.0) ? -result : result; } दिलचस्प लेख के रूप में अपनी impl'd, +1 –

+0

@Ruben Bartelink: 'दौर' बेहतर होना चाहिए:) ... btw .. आपके पास कुछ निंजा टाइपिंग कौशल हैं ;-) – Huppie