我們已經有了一個表中的Oracle數據庫定義爲:閱讀整數浮點
CREATE TABLE AVALUES
(
ACODE VARCHAR2(4) NOT NULL,
ATYPE NUMBER NOT NULL,
ANAME VARCHAR2(50),
CREATED DATE DEFAULT SYSDATE
)
在德爾福我們在ADOQuery成分類似於這樣的查詢返回的價值,我們的應用程序:
with qryComp do
begin
Close;
SQL.Text :=
'SELECT ATYPE FROM AVALUES ORDER BY CREATED';
Open;
while not EOF do
begin
AddComponents('NAME' + FieldByName('ATYPE').AsString);
Next;
end;
Close;
end;
部署在許多不同的客戶端PC上,這已經運行良好多年,我們的代碼沒有任何改變。然而,在一些客戶端PC上,它最近開始返回,例如1.999999999969而不是,這會導致應用程序崩潰。我們嘗試過尋找問題,但它非常間歇 - 通過遠程桌面連接到客戶端計算機,我們無法複製它。
對於我可以做的事情有什麼建議可以進一步調查?由於它是間歇性的,只發生在幾臺電腦上,所以很難調試。我認爲這可能是Oracle客戶端的問題,但我不確定我們如何才能真正驗證這一點。
感謝您的任何幫助。
整數在IEEE754浮點中完全可表示。必須對這樣的值進行計算才能返回。似乎很奇怪。你如何將這些值放入數據庫中?你是否在執行浮點計算?如果你認爲這是一個整數,你爲什麼要作爲浮點存儲?如果它確實是一個整數,那麼解決方案就是以整數形式存儲。 –
ATYPE是否真的需要Oracle NUMBER全浮點精度?或者你能否聲明一些類似NUMBER(6)的東西? NUMBER根據您聲明的方式來處理不同的情況。使用適當的聲明還可以節省列大小的空間,由公式ROUND((length(p)+ s)/ 2))+ 1給出,其中p是精度,s取值爲0或1,取決於數字標誌。如果您只是使用NUMBER,p = 38。另外NUMBER不會以IEEE754格式存儲數據。 BINARY_FLOAT和BINARY_DOUBLE做。有關詳細信息,請參閱「Oracle數據庫SQL參考」。 –