2011-04-13 11 views
6

मैं छोटी सी समस्या है और यह कहीं मूर्खतापूर्ण हो सकता है, लेकिन अभी भी मेरे पास है यह :)बेवकूफ, नीचे php दौर को समझ नहीं सकता :(

तो समस्या है:

इस

करने से
round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN); 

मुझे उम्मीद है कि परिणाम 61.53 होगा, लेकिन यह 61.54 है।

phpVersion = 5.3.2 

क्या कोई इसे हल करने में मेरी सहायता कर सकता है? धन्यवाद। अर्थात 0.005 हिस्सा -

उत्तर

11

PHP_ROUND_HALF_DOWNआधा दौर होगा।

अगर आप 61.535 है, PHP_ROUND_HALF_DOWN का उपयोग कर आप 61.53 मिलेगा - बजाय 61.54 आप सामान्य गोलाई के साथ प्राप्त की जानी चाहिए थी।
बेसिकल, .005आधा गोल किया गया है।

लेकिन 61.536 डेढ़ नहीं है: .006.005 की तुलना में अधिक है, तो उस मान को गोल करने से 61.54 मिलता है।



आपके मामले में, आप 100 से मूल्य गुणा कर सकता है, floor() फ़ंक्शन का उपयोग करें, और 100 से परिणाम को विभाजित - मुझे लगता है कि यह आप देना होगा कि आप क्या उम्मीद:

$value = 61.536; 
$value_times_100 = $value * 100; 
$value_times_100_floored = floor($value_times_100); 
$value_floored = $value_times_100_floored/100; 
var_dump($value_floored); 

मुझे देता है:

float(61.53) 
+0

हाँ साथ, मैं तुमसे कहा था, यह मूर्खतापूर्ण हो जाएगा: डी – arma

1

आपको स्पष्ट रूप से केवल इसे दो दशमलव स्थानों पर चाहते हैं क्यों न केवल संख्या_format (615.36 * 0.10, 2)

+0

हाँ है कि मैं वास्तव में क्या चाहते हैं, लेकिन जब से मेरे सवाल नहीं था मैं केवल आप वोट दें दे सकते हैं। धन्यवाद – arma

+0

यह काम नहीं करता है, क्योंकि यह गोल करता है: 'फ्लोट 15.315315315315' => 'स्ट्रिंग '15 .32'' – Yvan

2

यदि आप नीचे जाना चाहते हैं, तो आपको फर्श() का उपयोग करने की आवश्यकता होगी, जिसमें परिशुद्धता निर्दिष्ट करने का कोई साधन नहीं है, इसलिए इसे चारों ओर काम करना है, उदाहरण के लिए।

function floor_prec($x, $prec) { 
    return floor($x*pow(10,$prec))/pow(10,$prec); 
} 
+0

ग्रेट वन! धन्यवाद! – arma

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