加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么Round(-0.0066219357357)返回-1?

发布时间:2020-12-15 09:43:29 所属栏目:大数据 来源:网络整理
导读:我想回合(-0.0066219357357)并给出-1. 它不应该是0吗?我可以用什么来正确地围绕它? 更新: 该数字是(LineDirection.X / distance)的结果; 其中LineDirection.X是一个整数,而Distace是double. 解决方法 从XE查看System.pas,所有工作都由FISTP指令完成: pro
我想回合(-0.0066219357357)并给出-1.

它不应该是0吗?我可以用什么来正确地围绕它?

更新:
该数字是(LineDirection.X / distance)的结果;
其中LineDirection.X是一个整数,而Distace是double.

解决方法

从XE查看System.pas,所有工作都由FISTP指令完成:

procedure _ROUND;
    asm
      ...
            FISTP   qword ptr [ESP]
      ...
    end;

根据英特尔Instruction Reference,根据FPU控制字的RC字段指定的舍入模式,值“舍入为整数值”

因此,我建议您检查FPU控制字的RC字段是否设置为您需要的舍入.

您可以通过使用整个控制字来执行此操作 – 请参阅Set8087CW,以及相关的xxxx8087CW过程/函数,以及Default8087CW变量.

或者你可以试试Math.SetRoundMode,正如@Uwe Raabe建议的那样.您的情况听起来像是使用了rmUp或rmTruncate rmDown.

从理论上讲,你的CPU也是原因,但事实并非如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读