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

Delphi / Borland Pascal STR程序是如何进行的

发布时间:2020-12-15 09:26:52 所属栏目:大数据 来源:网络整理
导读:Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串: str(9.234:5:1,s); // - s = ' 9.2' 如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – 向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但
Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串:

str(9.234:5:1,s); // -> s = '  9.2'

如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – >向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但在Delphi中显然是一致的2007年:

BP:

var
  e: extended;
  d: double;
begin
  d := 2.15;
  e := 2.15;
  str(d:5:1,s); { -> s = '  2.1' }
  str(e:5:1,s); { -> s = '  2.2' }
  { but: }
  d := 2.25
  e := 2.25
  str(d:5:1,s); { -> s = '  2.3' }
  str(e:5:1,s); { -> s = '  2.3' }

我无法找到关于双打如何被舍入的任何规则,而显然扩展总是四舍五入.

Delphi 2007显然总是独立于数据类型.

有没有人知道如何在BP中进行舍入以获得双值?

我想知道,因为我正在移植一些使用双精度到Delphi 2007的Borland Pascal代码,当我比较输出时,我得到了STR过程中舍入导致的不一致.这些对结果并不重要,但却很难发现重要的差异.

解决方法

d = 2.15和d = 2.25的情况不同:

2.15不能以float格式精确表示,因此如果不分析给定float格式的float值的二进制表示,就不可能说明该值是如何舍入的;

2.25以float格式精确表示,舍入结果必须是可预测的;

我测试了一些以浮点格式精确表示的值的舍入,发现STR总是向上舍入为正值,向下舍入为负值. STR不遵循“银行家的舍入”,例如:

d := 2.25;
//  d:= roundto(d,-1);  banker's rounding is 2.2
  str(d:5:1,s); { -> s = '  2.3' }

  d:= 2.75;
//  d:= roundto(d,-1);  banker's rounding is 2.8
  str(d:5:1,s); { -> s = '  2.8' }

(编辑:李大同)

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

    推荐文章
      热点阅读