2015-02-26 4 views
12

मैं कुछ निश्चित संख्या के साथ कुछ फ्लोट संख्याओं की स्वरूपित स्ट्रिंग प्राप्त करने के लिए sprintf() का उपयोग कर रहा हूं। इसके अलावा, मैं सभी संख्याओं को लंबाई में भी बनाने के लिए अग्रणी शून्य जोड़ना चाहता था। पूर्णांकों के लिए कर रहा है कि pretty straight forward है:PHP: sprintf() के माध्यम से फ़्लोट करने के लिए अग्रणी शून्य/शून्य पैडिंग कैसे जोड़ें?

sprintf('%02d', 1); 

यह 01 का परिणाम देगा। हालांकि, परिशुद्धता के साथ एक नाव के लिए एक ही कोशिश कर काम नहीं करता:

sprintf('%02.2f', 1); 

पैदावार 1.00

मैं एक फ्लोट वैल्यू में अग्रणी शून्य कैसे जोड़ सकता हूं?

उत्तर

17

लघु जवाब:sprintf('%05.2f', 1); वांछित परिणाम दे देंगे 01.00

नोट कैसे %02%05 ने ले लिया।

स्पष्टीकरण

यह forum post सही दिशा में मुझे इशारा किया: पहले नंबर न अग्रणी शून्य की संख्या है और न ही दशमलव विभाजक के बाईं ओर की कुल वर्णों की संख्या लेकिन की कुल संख्या को निरूपित करता है परिणामी स्ट्रिंग में अक्षर!

उदाहरण कम से कम

sprintf('%02.2f', 1); पैदावार दशमलव विभाजक "." प्लस कम से कम 2 वर्ण परिशुद्धता के लिए। चूंकि यह कुल मिलाकर 3 वर्ण पहले से है, शुरुआत में %02 का कोई प्रभाव नहीं पड़ता है। वांछित "2 अग्रणी शून्य" एक सटीक और दशमलव विभाजक के लिए 3 अक्षरों जोड़ने की जरूरत है पाने के लिए, यह sprintf('%05.2f', 1);

कुछ कोड बनाने

$num = 42.0815; 

function printFloatWithLeadingZeros($num, $precision = 2, $leadingZeros = 0){ 
    $decimalSeperator = "."; 
    $adjustedLeadingZeros = $leadingZeros + mb_strlen($decimalSeperator) + $precision; 
    $pattern = "%0{$adjustedLeadingZeros}{$decimalSeperator}{$precision}f"; 
    return sprintf($pattern,$num); 
} 

for($i = 0; $i <= 6; $i++){ 
    echo "$i max. leading zeros on $num = ".printFloatWithLeadingZeros($num,2,$i)."\n"; 
} 

आउटपुट

0 max. leading zeros on 42.0815 = 42.08 
1 max. leading zeros on 42.0815 = 42.08 
2 max. leading zeros on 42.0815 = 42.08 
3 max. leading zeros on 42.0815 = 042.08 
4 max. leading zeros on 42.0815 = 0042.08 
5 max. leading zeros on 42.0815 = 00042.08 
6 max. leading zeros on 42.0815 = 000042.08 
संबंधित मुद्दे