Оба, 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 для двойных значений?
Я хочу знать, потому что я нахожусь в процессе переноса некоторого кода Borland Pascal, который использует удваивается, к Delphi 2007, и когда я сравниваю выходные данные, я получаю несоответствия, которые возникают в результате округления в процедуре STR. Это на самом деле не имеет значения для результата, но очень трудно определить важные различия.