[Erlang22]如何按规则位数输出数字

 
需求:把一个数字指定长度输出
例如: 
100000001
1200000012
120300001203
123456789123456789
123456701234567


方法一:使用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).
 
    
那些生活的小细节。

转载于:https://www.cnblogs.com/zhongwencool/p/erlang_format_integer.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值