我正在尝试将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)
这会产生正确的答案,但有更好的方法吗?
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.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |