Erlang

2009-08-09 17 views
24

में पैडिंग के साथ किसी संख्या को प्रारूपित करने के लिए मुझे किसी दिए गए लंबाई में पूर्णांक के आउटपुट को पैड करने की आवश्यकता है।Erlang

उदाहरण के लिए, 4 अंकों की लंबाई के साथ, पूर्णांक 4 का आउटपुट "4" के बजाय "0004" है। मैं Erlang में यह कैसे कर सकता हूँ?

उत्तर

30

आईओओ: प्रारूप ("~ 4..0 बी ~ एन", [न्यूम])।

12

string:right(integer_to_list(4), 4, $0).

35

जेड के जवाब देने के लिए स्पष्टीकरण का एक सा जोड़ने: F.P.PadModC ~:

Erlang Format specification है।

"~4..0B~n" तब्दील करने के लिए:

~F. = ~4. (Field width of 4) 
    P. = . (no Precision specified) 
Pad = 0 (Pad with zeroes) 
Mod =  (no control sequence Modifier specified) 
    C = B (Control sequence B = integer in default base 10) 

और ~n नई लाइन है।

+0

आप स्पष्टीकरण जोड़ सकते हैं एक और जवाब जोड़ने के बजाय उस उत्तर में। इससे उस प्रश्न को बेहतर बनाने में मदद मिलेगी और दूसरों की और मदद मिलेगी। –

+0

@CoralDoe स्पष्टीकरण उत्तर में किए गए तरीके से उत्तरों को टिप्पणियों को प्रारूपित करना संभव नहीं है। – Stas

2

io:format के साथ समस्या यह है कि यदि आपके पूर्णांक फिट नहीं करता है, तो आप तारक मिलता है:

> io:format("~4..0B~n", [1234]). 
1234 
> io:format("~4..0B~n", [12345]). 
**** 

string:right के साथ समस्या यह है कि यह अक्षर हैं जो फिट नहीं है फेंक देता है:

> string:right(integer_to_list(1234), 4, $0). 
"1234" 
> string:right(integer_to_list(12345), 4, $0). 
"2345" 

मुझे एक लाइब्रेरी मॉड्यूल नहीं मिला है जैसा कि मैं अपेक्षा करता हूं (यानी मेरा नंबर प्रिंट करें, भले ही वह पैडिंग में फिट न हो), इसलिए मैंने अपना खुद का स्वरूपण समारोह लिखा:

%%------------------------------------------------------------------------------ 
%% @doc Format an integer with a padding of zeroes 
%% @end 
%%------------------------------------------------------------------------------ 
-spec format_with_padding(Number :: integer(), 
          Padding :: integer()) -> iodata(). 
format_with_padding(Number, Padding) when Number < 0 -> 
    [$- | format_with_padding(-Number, Padding - 1)]; 
format_with_padding(Number, Padding) -> 
    NumberStr = integer_to_list(Number), 
    ZeroesNeeded = max(Padding - length(NumberStr), 0), 
    [lists:duplicate(ZeroesNeeded, $0), NumberStr]. 

(आप iolist_to_binary/1 का उपयोग करने के लिए द्विआधारी परिणाम कन्वर्ट करने के लिए कर सकते हैं, या आप lists:flatten (io_lib:format ("~ s", [परिणाम])) का उपयोग कर सकते है कि यह एक सूची में कन्वर्ट करने के लिए।)