Ich muss eine Gleitkommazahl auf zwei Dezimalstellen runden, aber immer unten. Jetzt benutze ich RoundTo(number, -2)
, aber es tut die Rundung mathematisch korrekt, was unerwünschtes Verhalten für meine Situation ist. Lassen Sie den Grund, warum ich dies tun müssen, beiseite ...Delphi - RoundTo - immer runter
ich es schließlich erreicht dies mit:
var a,b: currency;
floatStr: string;
format: TFormatSettings;
localeDec: char;
begin
format:= TFormatSettings.Create;
localeDec:= format.DecimalSeparator;
format.DecimalSeparator:= ',';
System.SysUtils.FormatSettings:= format;
a:= 2/30;
floatStr:= floatToStr(a);
b:= strToCurr(
copy(floatStr, 1, ansiPos(',', floatStr) + 2)
);
showMessage(currToStr(b));
format.DecimalSeparator := localeDec;
System.SysUtils.FormatSettings:= format;
end;
Diese Lösung ist jedoch nur nicht richtig anfühlt. Gibt es einen "mathematisch sauberen" Weg, dies zu tun, ohne mit Strings zu verwirbeln und Dezimaltrennzeichen etc. zurückzusetzen? Ich habe viel gesucht, aber keine gefunden.
Ich glaube geändert verwenden 'Int' ist besser als' Trunc' weil 'Trunc' möglicherweise überlaufen kann. – kludg
@ user246408 Ich denke eigentlich, es ist besser, das Ganze mit Integer-Operationen zu machen. –