首页 > 代码库 > [Erlang_Question22]如何按规则位数输出数字
[Erlang_Question22]如何按规则位数输出数字
需求:把一个数字指定长度输出
例如:
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).
那些感动人的小细节。
[Erlang_Question22]如何按规则位数输出数字
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。