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

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

概述我想回合(-0.0066219357357)并给出-1. 它不应该是0吗?我可以用什么来正确地围绕它? 更新: 该数字是(LineDirection.X / distance)的结果; 其中LineDirection.X是一个整数,而Distace是double. 从XE查看System.pas,所有工作都由FISTP指令完成: procedure _ROUND; asm .. 我想回合(-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也是原因,但事实并非如此.

总结

以上是内存溢出为你收集整理的delphi – 为什么Round(-0.0066219357357)返回-1?全部内容,希望文章能够帮你解决delphi – 为什么Round(-0.0066219357357)返回-1?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存