兩個,Borland公司帕斯卡爾7和Delphi 2007年已經拿到了程序STR這需要一個號碼,長度和精度,並把它轉換成一個像這樣的字符串:如何在Delphi/Borland的帕斯卡爾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' }
我無法找到任何規則如何雙打四捨五入,而顯然擴展總是四捨五入。
德爾福2007年顯然總是獨立於數據類型四捨五入。
是否有人知道在BP中舍入是如何完成雙值的?
我想知道,因爲我正在移植一些使用雙打到Delphi 2007的Borland Pascal代碼,當我比較輸出時,我得到了STR過程中四捨五入造成的不一致。這些對結果無關緊要,但卻很難找出重要的差異。
爲什麼試圖弄清楚它是如何工作的,當它可以改變所有的Str()調用到FloatToStr調用時出現問題? – 2010-02-25 19:03:20
他無法更改BP代碼。只有將Delphi代碼更改爲FloatToStr纔會向他購買任何東西。 – 2010-02-26 09:53:33
請注意,在傳遞給Str()之前,double可能會轉換爲擴展。這意味着擴展後的2.15和2.15之後的擴展可以有不同的值,因此可能會有所不同。否則,接受的答案是正確的:2.25可以精確地表示(.25是2^-2),通過擴展和雙精度來表示,而2.15不能。 – 2016-06-06 15:41:57