2016-07-04 5 views
2

Ich habe eine Zeichenfolge, die wie folgt sein kann: "100.4", "100.4867", "100.0". Ich möchte es abschneiden, so dass es nach dem Zeitraum höchstens zwei Ziffern hat. Also zum Beispiel: "100.4", "100.48", "100.0". Was ist ein effizienter Weg, dies in Erlang zu tun?Effizient abgeschnitten Zeichenfolge "float" in Erlang

+0

Sie don‘ Soll "100.4867" auf "100.49" gerundet werden? – RichN

+0

@RichN - Egal wie geht es mir –

Antwort

4

Wenn Sie sicher, dass Saiten rechts Darstellung Schwimmer enthält, tun kann, zum Beispiel so:

List = [ "100.4", "100.4867", "100.0"]. 
[fun()->lists:sublist(X,string:chr(X,$.)+2) end() || X<-List]. 

und Ergebnis:

["100.4","100.48","100.0"] 

wenn nein - fügen Sie die Bearbeitung dieser Fälle .

Wie bereits erwähnt zu Recht Lyn Headley in den Kommentaren hier anonyme Funktion nicht erforderlich ist, und Sie können dies tun:

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

warum die anonyme Funktion? –

+0

@LynHeadley, danke. Es ist Gewohnheit, ich werde die Antwort bearbeiten. –

3

Wenn Sie effiziente Implementierung fragen:

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)].