Как сохранить 2 знака после запятой в Delphi? - PullRequest
1 голос
/ 13 апреля 2011

Я должен выбрать некоторые данные столбца из таблицы базы данных и сделать эти данные только с двумя десятичными разрядами.Я вижу это

SQL.Strings = ('select' #9'my_index '#9'his_index,'...

Что это такое # 9 ?Как я могу работать с данными, которые я выбрал, чтобы сохранить только два десятичных знака?Я очень новичок в Delphi.Спасибо!

Ответы [ 5 ]

8 голосов
/ 13 апреля 2011

#9 - это символ с кодом 9, TAB.

Если вы хотите преобразовать значение с плавающей запятой в строку с двумя десятичными разрядами, вы используете одну из функций форматирования, например, Format():

var
  d: Double;
  s: string;
...
d := Sqrt(2.0);
s := Format('%.2f', [d]);
4 голосов
/ 13 апреля 2011

#9 - символ табуляции.

Если f является переменной с плавающей запятой, вы можете сделать FormatFloat('#.##', f), чтобы получить строковое представление f с не более чем 2 десятичными числами.

0 голосов
/ 20 декабря 2018
function Round2(aValue:Real):Real;    
begin    
  x:=Round(aValue*100)/100;    
end;
0 голосов
/ 30 ноября 2017

Это сработало для меня:

Function RoundingUserDefineDecaimalPart(FloatNum: Double; NoOfDecPart: integer): Double;
Var
     ls_FloatNumber: String;
Begin
     ls_FloatNumber := FloatToStr(FloatNum);
     IF Pos('.', ls_FloatNumber) > 0 Then
          Result := StrToFloat
            (copy(ls_FloatNumber, 1, Pos('.', ls_FloatNumber) - 1) + '.' + copy
                 (ls_FloatNumber, Pos('.', ls_FloatNumber) + 1, NoOfDecPart))
     Else
          Result := FloatNum;
End;
0 голосов
/ 14 марта 2016

Процедуры внутреннего формата с плавающей запятой работают только с простыми числами> 1

Вам нужно сделать что-то более сложное для ограничителя десятичного разряда общего назначения, который правильно работает как с фиксированной точкой, так и со значениями <1 с научной нотацией.</p>

Я использую эту процедуру

function TForm1.Flt2str(Avalue:double; ADigits:integer):string;
var v:double; p:integer; e:string;
begin
  if abs(Avalue)<1 then
  begin
    result:=floatTostr(Avalue);
    p:=pos('E',result);
    if p>0 then
    begin
      e:=copy(result,p,length(result));
      setlength(result,p-1);
      v:=RoundTo(StrToFloat(result),-Adigits);
      result:=FloatToStr(v)+e;
    end else
      result:=FloatToStr(RoundTo(Avalue,-Adigits));
  end
  else
    result:=FloatToStr(RoundTo(Avalue,-Adigits));
end;

Итак, с цифрами = 2, 1,2349 раундов до 1,23 и 1,2349E-17 раундов до 1,23E-17

...