2014-05-13 28 views
6
const 
    minDriveFreeSpace: Int64 = 1024*1024*1024*99; 

ve Delphi'nin hata veya sınırı maks. sabit tamsayı değerleri?

var 
    minDriveFreeSpace: Int64; 
begin 
    minDriveFreeSpace := 1024*1024*1024*99; 

yayarlar Will:

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation 

Delphi maks bu bir hata ya da sınır mı. sabit tamsayı değerleri?

+0

İlginç! Aynı zamanda David'in işaret ettiği benzer (çoğaltılmış) sorudaki disk spce'ını temsil etmekle de alakalı görünüyor. –

cevap

10

Sağ tarafta en az bir değer Int64'a atmanız gerekir. Örneğin, bu her iki XE6 üzerinde mükemmel derlemek: o dökme SağDeğerler herhangi biri olabilir

const 
    minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99; 

var 
    minDriveFreeSpace2: Int64; 
begin 
    minDriveFreeSpace2 := Int64(1024)*1024*1024*99; 

Not. Örneğin, bu da aynı şekilde çalışır:

const 
    minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99); 

numaralandırılmış (zayıf olsa da) Delphi language guide belgelenmiştir - vurgu mayın: Genel olarak

, tamsayılar üzerinde aritmetik işlemler bir değeri döndürür 32-bit LongInt'e eşdeğer Tamsayı yazın. İşlemler, yalnızca bir veya daha fazla Int64 işleneni gerçekleştirildiğinde Int64 türünde bir değer döndürür. nedenle, şu kod üretir yanlış sonuçlar:

var 
I: Integer; 
J: Int64; 
... 
I := High(Integer); 
J := I + 1; 

Int64 olarak I dökme bu durumda bir Int64 dönüş değerini almak için:

... 
J := Int64(I) + 1; 
+0

Teşekkürler Ken, Benim geçici çözümüm (bu soruda görünmüyordu) biraz daha ayrıntılıydı: P –

İlgili konular