我想Round(-0.0066219357357),它给了-1.
不应该是0吗?我可以用什么来正确地围绕它?
更新: 数字是(LineDirection.X/distance)的结果; 其中LineDirection.X是一个整数,而Distace是double.
从XE查看System.pas,所有工作都由FISTP指令完成:
procedure _ROUND;
asm
...
FISTP qword ptr [ESP]
...
end;
Run Code Online (Sandbox Code Playgroud)
根据英特尔的指令参考,根据FPU控制字的RC字段指定的舍入模式,值"舍入为整数值"
因此,我建议您检查FPU控制字的RC字段是否设置为您需要的舍入.
您可以通过使用整个控制字来执行此操作 - 请参阅Set8087CW以及相关的xxxx8087CW过程/函数,以及Default8087CW变量.
或者你可以试试Math.SetRoundMode,正如@Uwe Raabe建议的那样.您的案例听起来像是使用了rmUp或rmTruncate rmDown.
从理论上讲,你的CPU也是原因,但事实并非如此.