Erlang 有效截断字符串“;浮动;在二郎

Erlang 有效截断字符串“;浮动;在二郎,erlang,Erlang,我有一个字符串可以是这样的:“100.4”,“100.4867”,“100.0”。我想截断它,使它在句点后最多有两位数。例如:“100.4”,“100.48”,“100.0”。在Erlang中执行此操作的有效方法是什么?如果您确定字符串包含正确的浮点表示,则可以执行以下操作,例如: List = [ "100.4", "100.4867", "100.0"]. [fun()->lists:sublist(X,string:chr(X,$.)+2) end() || X<-List]

我有一个字符串可以是这样的:“100.4”,“100.4867”,“100.0”。我想截断它,使它在句点后最多有两位数。例如:“100.4”,“100.48”,“100.0”。在Erlang中执行此操作的有效方法是什么?

如果您确定字符串包含正确的浮点表示,则可以执行以下操作,例如:

List = [  "100.4", "100.4867", "100.0"].
[fun()->lists:sublist(X,string:chr(X,$.)+2) end() || X<-List].  
如果否-添加这些案例的处理

正如注释匿名函数中正确指出的那样,此处不需要Lyn Headley,您可以这样做:

[lists:sublist(X,string:chr(X,$.)+2) || X<-List].

[列表:子列表(X,字符串:chr(X,$)+2)| | X如果您询问高效的实施:

trunc([]) -> [];   %% or raise exception because it is not a float
trunc(".") -> [];  %% or "." = L) -> L or raise exception or ".0" or what ever you want
trunc([$.,_] = L) -> L;
trunc([$.,_,_] = L) -> L;
trunc([$.,X,Y|_]) -> [$.,X,Y];
trunc([H|T]) -> [H|trunc(T)].

为什么使用匿名函数?@LynHeadley,谢谢。这是我的习惯,我会编辑答案。我会用string:rstr/2替换string:chr/2。你不想让“100.4867”四舍五入到“100.49”?@RichN-任何一种方式都可以
trunc([]) -> [];   %% or raise exception because it is not a float
trunc(".") -> [];  %% or "." = L) -> L or raise exception or ".0" or what ever you want
trunc([$.,_] = L) -> L;
trunc([$.,_,_] = L) -> L;
trunc([$.,X,Y|_]) -> [$.,X,Y];
trunc([H|T]) -> [H|trunc(T)].