Borland Pascal7とDelphi2007の両方に、数値、長さ、精度を取り、次のような文字列に変換するプロシージャSTRがあります。
str(9.234:5:1, s); // -> s = ' 9.2'
丸めがあいまいでない場合はすべて問題ありませんが、そうでない場合(0.5->上または下?)には問題があります。BPの浮動小数点データ型に依存しているようですが、Delphi2007では明らかに一貫しています。 :
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でdouble値の丸めがどのように行われるかを知っている人はいますか?
doubleを使用するBorlandPascalコードをDelphi2007に移植している最中であり、出力を比較すると、STRプロシージャでの丸めの結果として不整合が発生するためです。これらは結果にとって実際には重要ではありませんが、重要な違いを見つけることは非常に困難です。