Excel INT到Delphi的翻译

Set*_*Net 1 delphi excel

我正在尝试将Excel工作表翻译成Delphi并偶然发现了Excel INT.Excel帮助说INT的向下舍入(向负无穷大).Excel单元格是:

C13-(24*INT(C13/24))
Run Code Online (Sandbox Code Playgroud)

其中C13初始化为-465.9862462并计算为14.01375378

我能提出的最好的Delphi是:

C13 := -465.9862462; 
RoundMode := GetRoundMode;// Save current mode
SetRoundMode(rmDown);
C13 := C13 - (24 * (Round(C13 / 24)));
SetRoundMode(RoundMode);// Restore mode
Run Code Online (Sandbox Code Playgroud)

这会产生正确的答案,但有更好的方法吗?

Rud*_*uis 5

Delphi也有一个Int()功能.它甚至记录在案:

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Int

那将大致相当于Excel功能.它也向下舍入,但不是向负无穷大.它向下舍入0.所以对于负数,你必须减去1.0:

function ExcelInt(N: Extended): Extended;
begin
  Result := System.Int(N);
  if (Result <> N) and (N < 0.0) then
    Result := Result - 1.0;
end;
Run Code Online (Sandbox Code Playgroud)

注意:

有人可能倾向于使用System.Math.Floor,因为它已向下舍入负无穷大,但返回一个Integer,因此对于大值,您可能会得到整数溢出.请注意,在Excel中,每个数字都是a Double,因此它也INT()返回a Double.