2011-04-13 2110 views
0

我不得不從數據庫表中選擇的一些列數據,使這個數據,只有小數點後兩位。我看到這個如何在delphi中保留2位小數?

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

那是什麼#9
我該如何處理我選擇,使之只保留小數點後兩位的數據?
我是很新的德爾福。
謝謝!

+0

什麼數據類型的數據庫?德爾福有什麼字段類型?您是否需要將數據作爲字符串使用,或者您是否需要將數據作爲四捨五入的數字類型保留2位小數? – 2011-04-13 13:34:26

回答

7

#9與代碼9,TAB字符。

如果你想將浮點值轉換爲字符串,您使用的格式化功能一個2位小數,如Format()

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

請修復顯而易見的語法錯誤。 – 2011-04-13 13:34:32

4

#9是製表符。

如果f是一個浮點變量,則可以執行FormatFloat('#.##', f)以獲取不超過2位小數的字符串表示形式f

+0

遲到14秒! – 2011-04-13 13:41:21

+0

@David:我知道,我正在解決一個PDE,並沒有給予足夠的重視,所以... – 2011-04-13 13:42:24

+0

哦......你們相互競爭!多謝你們倆! – spspli 2011-05-10 15:27:15

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.2349四捨五入爲1.23和1.2349E-17回合1.23E-17

0

使用名爲RoundingUserDefineDecaimalPart功能。

用於例如爲:

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

你能解釋一下你在哪裏找到這個神奇的功能以及它是如何工作的? – 2017-11-27 12:22:19

+0

https://stackoverflow.com/a/47566361/8319246 – amytrajghimire 2017-11-30 05:20:07

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;