Delphi检查double是否为整数

时间:2017-01-07 00:21:22

标签: delphi

我需要测试double是否为整数。基本上这是规则的一个例子:

  • 5.0>真
  • 5.2>假

为了做到这一点,我会创建一个if (result mod 1) = 0 then并查看它是返回true还是false。考虑result是双倍的。顺便说一句,编译器给了我这个错误:

  

[dcc32错误] Unit1.pas(121):E2015操作员不适用于此   操作数类型

我该如何解决这个问题?请注意,我的数字采用这种格式##.#####,因此我对浮点精度没有太多问题。

一般情况下,我会使用if (result % 1 == 0) {},但在Delphi中这不起作用。

3 个答案:

答案 0 :(得分:8)

您可以使用Delphi的System单元中声明的函数mod。试试这段代码:

45.1234

检查documentation以获取有关该功能的详细信息。你在做什么是错的,因为在Delphi中,关键字Simulator > Reset Content and Settings 仅适用于整数。

注意即可。我用$("ul.rock").click(function() { console.log("rock clicked"); $("div.recordElement").toggle(); $("div.recordElement.pop").toggle(); $(".dropDownMenu").toggle(); }); 等数字对此进行了测试,代码是正确的。我看到你的双数字中有一些数字,所以不应该有问题。我不确定该功能有多准确,但在这种情况下你不必担心。

答案 1 :(得分:0)

该比较将在Freepascal中有效。...

{$mode objfpc}{$R+}
uses math;
var
  a:double =  5.2;
  b:double =  5.0;
begin
  writeln(a mod 1 = 0);
writeln(b mod 1 = 0);
end.

但这在Delphi中不起作用,我知道...

在Delphi中,应该使用fmod:

uses math;
var
  a:double =  5.2;
  b:double =  5.0;
begin
  writeln(fmod(a,1) = 0);
  writeln(fmod(b,1) = 0);
end.

答案 2 :(得分:-1)

也许你也想要关注漂浮不精确,这样你可以这样做:

if comparevalue(aValue, round(aValue), Tepsilon.vector) = 0 then 
  hasnodecimal 
else 
  hasdecimal