2011-04-13 7 views
0

데이터베이스 테이블에서 일부 열 데이터를 선택하고 소수 자릿수 2 자리로만이 데이터를 만들어야합니다. 나는 이것이 무엇델파이에서 소수 2 자리를 유지하는 방법?

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

참조 # 9인가?
소수점 두 자리 만 유지하도록 선택한 데이터를 어떻게 처리 할 수 ​​있습니까?
저는 델파이를 매우 신습니다.
감사!

+0

데이터베이스에 어떤 데이터 유형입니까? 델파이에서 가지고있는 필드 유형은 무엇입니까? 데이터를 문자열로 필요로하거나 소수점 이하 두 자리 만 올림하는 숫자 유형으로 필요합니까? –

답변

7

#9은 코드 9, TAB가있는 문자입니다.

부동 소수점 값을 소수점 2 자리의 문자열로 변환하려면 형식 지정 함수 중 하나를 사용하십시오. Format() :

var 
    d: Double; 
    s: string; 
... 
d := Sqrt(2.0); 
s := Format('%.2f', [d]); 
+0

확실한 구문 오류를 수정하십시오. –

4

#9는 탭 문자이다.

f이 부동 소수점 변수 인 경우 FormatFloat('#.##', f)을 입력하면 f의 문자열 표현을 2 자리 이하로 얻을 수 있습니다.

+0

14 초 늦었습니다! –

+0

@David : PDE을 해결하면서 SO에 충분한주의를 기울이지 않았습니다 ... –

+0

오 ... 당신은 서로 경쟁합니다! 둘 다 주셔서 감사합니다! – spspli

0

내부 부동 소수점 형식 루틴은 단순한 숫자 일> 당신은 모두 고정 점에서 제대로 작동하고 과학적 표기법으로 < 1 값 범용 소수점 제한에 대한 더 복잡한 무언가를 할 필요가

1.

나는 자리, 그래서이 루틴

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.23 및 1.2349E-17 라운드에 1.2349 원에 1.23E-17

0

RoundingUserDefineDecaimalPart라는 기능을 사용합니다. 예컨대위한

:

avg := RoundingUserDefineDecaimalPart(avg, 2); 
+1

이 마법의 기능을 발견 한 곳과 작동 방법을 설명 할 수 있습니까? –

+0

https://stackoverflow.com/a/47566361/8319246 – amytrajghimire

0

이 나를 위해 작동합니다

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;