2011-11-07 7 views
5

मैं की तरहपाश के लिए नाव के लिए नहीं चल रहा है महत्व देता

<?php 

for($i=0;$i<=10;$i+0.4){ 

echo $i."<br>"; 
} 

?> 

नीचे इस कोड मूल्य प्रिंट की मैं तक 9.6 नहीं 10

कारण है कि यह मैं का मान देता है पाश के लिए एक राशि = 10 अंत में।

+2

आपने गलती की, '$ i + 0.4' शायद '$ i + = 0.4' था, क्योंकि आपने कहा था कि यह 9.6 तक बढ़ता है, अमान्य नीचे 3 उत्तरों प्रस्तुत करता है। –

उत्तर

2

+= का उपयोग केवल प्लस के बजाय, इसे बढ़ाने के लिए करें। जैसा कि अब है, यह मेरे लिए एक अनंत लूप है।

संपादित करें: किसी कारण से PHP विभिन्न प्रकार के लूपों के साथ ठीक से काम नहीं करता है।

यह नीचे

for($i=0;$i<=100;$i+=4){ 
    echo $i/10."<br>"; 
} 

यहाँ काम करना चाहिए var_dump

int(0) 

float(0.4) 

float(0.8) 

float(1.2) 

float(1.6) 

int(2) 

float(2.4) 

float(2.8) 

float(3.2) 

float(3.6) 

int(4) 

float(4.4) 

float(4.8) 

float(5.2) 

float(5.6) 

int(6) 

float(6.4) 

float(6.8) 

float(7.2) 

float(7.6) 

int(8) 

float(8.4) 

float(8.8) 

float(9.2) 

float(9.6) 

int(10) 

शायद ऑटो कास्टिंग पीएचपी कि क्योंकि मशीनों के लिए फ़्लोट संख्या के प्रतिनिधित्व करने के लिए इस

+0

यह प्रिंटिंग क्यों नहीं कर रहा है 10. मैं केवल यह पूछ रहा हूं। कृपया – manishjangir

+0

कोई समाधान नहीं है। –

+0

@RokKralj अब एक समाधान। – Mob

3

खड़ी कर रहा है कर रहा है है कि - http://en.wikipedia.org/wiki/Floating_point

मैं छोरों

+0

+1। लेकिन पूर्णांक अनुक्रमणिका का उपयोग करना हमेशा संभव नहीं होता है। उन मामलों में आपको ईपीएसलॉन मान का उपयोग करना होगा - उदा। अनुमत गलती मेरा जवाब देखें –

2

सही फ्लोट तुलना (जो < = में जगह लेता है) के साथ कोई समस्या है के लिए पूर्णांक अनुक्रमित उपयोग करने के लिए सलाह देते हैं।

इसे इस तरह कार्य करें:

for($i=0; $i<=100; $i+=4){ 
    echo ($i/10)."<br>"; 
} 
1

आप कर सकता है:

<?php 

for($i=0;$i<=100;$i += 4){ 

echo ($i/10)."<br>"; 
} 

?> 

परिणाम यहाँ: http://codepad.org/CxvzEUeq

+0

लेकिन वास्तव में मेरे पास दो मान हैं एक $ $ शुरू होता है और दूसरा $ अंत होता है। ये मान फ्लोट या इंट जैसे कुछ भी हो सकते हैं। तो मेरे लूप के लिए ($ i = $ start; $ <= $ end; $ i = +। 4) – manishjangir

+0

यह समस्या तब होती है जब आप किसी अन्य उत्तर में सुझाए गए तुलना की तुलना करते हैं –

+0

@ user1031816: मैंने एक और पोस्ट किया है जवाब, जो दिखाता है कि चीज को कैसे किया जाना चाहिए। ईपीएसलॉन मूल्य के साथ। –

0

जब तुलना, आप एप्सिलॉन मूल्य है, जिसकी अनुमति अर्थ है उपयोग करने के लिए फ्लोट वैल्यू की तुलना करते समय गलती।

$epsilon=0.000001; //a very small number 

for($i=0; $i<10 or abs($i-10)<$epsilon; $i+=0.4){ 
    echo $i."<br>"; 
} 
1

सटीक तुलना के लिए आप उन मूल्य दौर कर सकते हैं, निम्नलिखित की तरह के रूप में ...

<?php 

    for($i=0; round($i,1) <= 10; $i += 0.4){ 
     echo $i."<br/>"; 
    } 

?> 
1

<?php

for($i=0;$i<10;$i+0.4){

echo $i."<br>";

}

?>

यदि u डाल मैं < = 10 तो यह 10 मूल्य, लेकिन करने के लिए मुद्रण के लिए जारी रहेगा अगर निकालें = तो हस्ताक्षर यह 9 बजे बंद हो जाएगा!