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
Antwort
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].
warum die anonyme Funktion? –
@LynHeadley, danke. Es ist Gewohnheit, ich werde die Antwort bearbeiten. –
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)].
Sie don‘ Soll "100.4867" auf "100.49" gerundet werden? – RichN
@RichN - Egal wie geht es mir –