2011-02-23 10 views
25

मैं यह सुनिश्चित करना चाहता हूं कि किसी भी दशमलव गणितीय दौर नियमों के बारे में चिंता किए बिना PHP में एक फ्लोट गोलाकार हो। इस समारोह के रूप में इस काम करेगा:मैं कैसे सुनिश्चित कर सकता हूं कि एक फ्लोट हमेशा PHP के साथ गोलाकार होगा?

1.1 to 2 
1.2 to 2 
1.9 to 2 
2.3 to 3 
2.8 to 3 

मैं जानता हूँ कि round() समारोह मौजूद है, लेकिन मैं गोलाई यदि कोई दशमलव पाया जाता है के लिए किसी भी समारोह नहीं दिख रहा। क्या ऐसा करने का कोई आसान तरीका है?

उत्तर

59

उपयोग ceil समारोह:

$number = ceil(1.1); //2 
+0

कभी कभी 'ceil' (या' floor':

$fig = pow(10, $precision); 

यह शून्य और नकारात्मक सटीक मूल्यों तों के साथ भी काम करना चाहिए) गोल करने के लिए सही जवाब नहीं है। आप आसानी से एक गणना परिणाम प्राप्त कर सकते हैं जो अप्रत्याशित रूप से व्यवहार करेगा: 'छत ((0.1 + 0.2) * 10)' 4' उत्पादन करता है! – Walf

10

Ceil के लिए आप

उदाहरण से लिया क्या करेंगे कि:

<?php 
echo ceil(4.3); // 5 
echo ceil(9.999); // 10 
echo ceil(-3.14); // -3 
?> 
10

मैं इस सवाल का पता देर से उत्तर दिया गया है, लेकिन यह जब मैंने विषय पर एक Google खोज की थी तब आया था। यदि आप परिशुद्धता के साथ गोल करना चाहते हैं, तो छत फ़ंक्शन का उपयोग करने के लिए एक अच्छी विधि होगी और कितनी दशमलव अंक आप प्रतिनिधित्व करना चाहते हैं और उस नंबर से विभाजित करें।

ceil(1024.321*100)/100 

उत्पादन होगा 1024,33

+0

इतना आसान अभी तक बहुत उपयोगी है। काफी आश्चर्यजनक 'दौर() 'इस परिदृश्य को संभाल नहीं सकता है। – PaulSkinner

14

मैं जानता हूँ कि यह एक पुराने विषय है, हालांकि Google में दिखाई देता है। मैं परिशुद्धता के बारे में ब्लेक प्लंब के जवाब का विस्तार करूंगा।

ceil(1024.321 * 100)/100; 

100 से गुणा करके 100 से विभाजित केवल एक सौवां के साथ काम करता है। यह दसवां पर सही, एक हजारवें हिस्से, एक सौ हजारवें, आदि

function round_up($number, $precision = 2) 
{ 
    $fig = pow(10, $precision); 
    return (ceil($number * $fig)/$fig); 
} 

परिणाम नहीं है:

var_dump(round_up(1024.654321, 0)); // Output: float(1025) 
var_dump(round_up(1024.654321, 1)); // Output: float(1024.7) 
var_dump(round_up(1024.654321, 2)); // Output: float(1024.66) 
var_dump(round_up(1024.654321, 3)); // Output: float(1024.655) 
var_dump(round_up(1024.654321, 4)); // Output: float(1024.6544) 
var_dump(round_up(1024.654321, 5)); // Output: float(1024.65433) 
var_dump(round_up(1024.654321, 6)); // Output: float(1024.654321) 

नोट्स:

से योगदान के लिए धन्यवाद जोसेफ मैकडर्मॉट और ब्रैंडम मेरे मूल स्निपेट को बेहतर बनाने के लिए।

2

मैं ऐश की प्रतिक्रिया पसंद है, हालांकि मैं होगा:

$fig = (int) str_pad('1', $precision + 1, '0'); 

भावना है कि अगर मैं सटीक '2', मैं उम्मीद होती है बनाता है यह 2 दशमलव स्थानों के लिए गोल। हालांकि मुझे लगता है कि पसंद का मामला। उत्तर एश के लिए धन्यवाद, अच्छी तरह से काम करता है।

+0

आप सही हैं, मैं इसे पूरी तरह से याद किया।मैं जवाब अपडेट करूंगा। – ash

2

मैं ऐश का जवाब और यूसुफ की पसंद की तरह तो मैं सुझाव देना:

var_dump(round_up(1024.654321, -1)); // Output: float(103) 
संबंधित मुद्दे