需求:把一个数字指定长度输出
例如:
1 | 00000001 |
12 | 00000012 |
1203 | 00001203 |
123456789 | 123456789 |
1234567 | 01234567 |
方法一:使用io_lib:format来构造:
%%使用Io:fromat来输出~F.P.PadModC. %% ~F. ---> ~4. 宽度为F %% P. ---> . 无精度要求 %% Pad ---> 0 用Pad填充 %% Mod ---> 没有控制序列修饰符指定 %% C ---> B 控制为10进制输出 %% format_integer_8_digit(Num) -> lists:flatten(io_lib:format("~8..0B", [Num])).
方法二:使用string:right/2来构造
%%使用string:right来构造 format_integer_8_digit2(Num)when is_integer(Num) -> string:right(integer_to_list(Num),8,0); format_integer_8_digit2(NumList) -> string:right(NumList,8,0).
方法一 | 1.如果给的数字大于8位就会输出* ,不符合需求 2.不能指定填充的倍数,只能是写死为8,不灵活 |
方法二 | 1.如果给的数字大于8位,会把数字从右边起至第8位截断,不符合需求:123456789--->23456578 |
所以只能自定义啦:
方法三:自定义
format_integer_8_digit3(Number, Padding) when Number < 0 -> [$- | format_integer_8_digit3(-Number, Padding - 1)]; format_integer_8_digit3(Number, Padding) -> NumberList = integer_to_list(Number), ZeroesNeeded = max(Padding - length(NumberList), 0), lists:flatten([lists:duplicate(ZeroesNeeded, $0), NumberList]).
插播小Tip:
查看otp版本信息
erlang:system_info(otp_release).
那些感动人的小细节。
时间: 2024-10-09 10:06:06