function MyRoundToStr(sum:double):string;
var buf:string;
begin
buf:=FloatToStr(sum);
FloatToStr и проблема с точностью
Код:
на вход передается double 7225,08 а после FloatToStr в buf записывается '7225,07999999999'. Далее функция смотрит что после запятой больше двух знаков, третья цифра после запятой (9) больше 5 и добавляет к исходному числу 0,01 (sum:=sum + 0,01), в результате чего я получаю на выходе строку 7225,09. Как заставить FloatToStr преобразовать число точно =)
Эта функция существует в двух версиях. Вторая версия позволяет форматировать выходной поток.
Код:
buf:=FloatToStrF(sum,fffixed,10,2);
buf:=floattostr(roundto(sum,-2));
buf:=floattostr(roundto(sum,-2));
И так, к сведению - если используем округление, то не забываем про <Get|Set>RoundMode