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

是否有编译器设置来控制如何在Delphi中键入浮点文字?

发布时间:2020-12-15 04:18:00 所属栏目:大数据 来源:网络整理
导读:虽然e的情况默认情况下工作,但我想更改文字0.1的默认转换,以允许r在没有任何代码修改的情况下工作.这可能通过编译器选项,编译器指令或其他任何东西吗? procedure Test;var s : Single; r : Real; d : Double; e : Extended;begin s := 0.1; if (s = 0.1) th
虽然e的情况默认情况下工作,但我想更改文字0.1的默认转换,以允许r在没有任何代码修改的情况下工作.这可能通过编译器选项,编译器指令或其他任何东西吗?
procedure Test;
var
  s : Single;
  r : Real;
  d : Double;
  e : Extended;
begin
  s := 0.1;
  if (s = 0.1) then ShowMessage('s matched'); // fail

  r := 0.1;
  if (r = 0.1) then ShowMessage('r matched'); // fail

  d := 0.1;
  if (d = 0.1) then ShowMessage('d matched'); // fail

  e := 0.1;
  if (e = 0.1) then ShowMessage('e matched'); // pass
end;

解决方法

没有编译器开关可以满足您的需求.问题是32位Windows编译器将浮点文字表示为10字节扩展精度值.并且因为0.1不能完全表示,所以不等于0.1的8字节双精度表示.

documentation说:

If constantExpression is a real,its type is Extended.

但是,您可以使用类型常量来获得所需的结果.例如:

const 
  TenthDouble: Double = 0.1;
var
  d: Double;
....
d := 0.1;
if d = TenthDouble then
  ....

通过使用类型化常量,我们可以强制编译器使常量为0.1的双字节精度表示.

(编辑:李大同)

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

    推荐文章
      热点阅读