DelphiBorland Pascal STR程序是如何进行的

DelphiBorland Pascal STR程序是如何进行的,第1张

概述Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串: str(9.234:5:1, s); // -> s = ' 9.2' 如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – >向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但在Delphi中显然是一致的2007年: BP: var e: ext Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串:

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

如果舍入是非模糊的,那么一切都很好,但如果它不是(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' }@H_419_12@  

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

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' }@H_419_12@                            	          总结       

以上是内存溢出为你收集整理的Delphi / Borland Pascal STR程序是如何进行的全部内容,希望文章能够帮你解决Delphi / Borland Pascal STR程序是如何进行的所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存