I have seen many floating point values going wrong. All of them have to do with Beyond Compare missing the extra zero, while Delphi adding it.
Do you have time to get an overview of the various Convert.exe to text conversions and their differences?
I do not have a machine with sufficient Convert.exe versions, only one with copies of most of the RTL source code (I seem to be missing Delphi 2005, and do not have access to Delphi 10.3 Rio).
Code:
``` pascal
procedure ConvertValue;
...
begin
case Reader.NextValue of
...
vaExtended, vaDouble:
WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
vaSingle:
WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + 's');
vaCurrency:
WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + 'c');
vaDate:
WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + 'd');
...
end;
```
</div>
or Delphi 1:
<div class="bbcode_container">
<div class="bbcode_description">Code:</div>
<pre class="bbcode_code">“` pascal
procedure ConvertValue;
begin
case Reader.ReadValue of
…
vaExtended:
begin
Reader.Read(Ext, SizeOf(Ext));
WriteStr(FloatToStr(Ext));
end;
…
end;
“`
</div>
In the next reply is what a quick search revealed: at about Delphi 7, 18 floating point format with 18 decimal digits was introduced.
Maybe it makes sense to incorporate two Dfm conversions in Beyond Compare: legacy (current behaviour) and mainstream (Delphi 7 and up behaviour).
</div>
</div>
<div class="b-post__edit OLD__post-edit h-margin-vert-l">Last edited by <a href="https://www.scootersoftware.com/vbulletin/member/14435-jeroenp">jeroenp</a>; <span class="time">09-Apr-2019, 03:14 AM</span>.</div>
—
<h4>jeroenp</h4>
<div class="b-media h-hide–on-preview">
<div class="b-media__body">
<div class="b-post__timestamp OLD__post-date"><time datetime="2019-04-09T03:14:28">09-Apr-2019, 03:14 AM</time></div>
</div>
</div>
<div class="OLD__post-content h-padding-vert-xl">
<div class="js-post__content-text OLD__post-content-text restore h-wordwrap">
From my archives:
<div class="bbcode_container">
<div class="bbcode_description">Code:</div>
<pre class="bbcode_code">“` text
C:\Delphi-RTL-VCL-FMX-Sources\Library-Sources>grep -ind “WriteAsciiStr\(FloatToStr” *Classes.pas
D10.1Berlin-Professional-D24-RadStudio-18.0\source.24.0.25048.9432\rtl\common\System.Classes.pas
13694 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13696 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13698 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13700 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
D10.2Tokyo-Professional-D25-RadStudio-19.0\source.25.0.29039.2004\rtl\common\System.Classes.pas
13938 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13940 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13942 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13944 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
D10Seattle-Enterprise-D23-RadStudio-17.0\source.23.0.20618.2753\rtl\common\System.Classes.pas
13346 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13348 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13350 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13352 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
D10Seattle-Enterprise-D23-RadStudio-17.0\source.23.0.21418.4207\rtl\common\System.Classes.pas
13351 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13353 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13355 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13357 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE3-Enterprise-D17-RadStudio-10.0\source\rtl\common\System.Classes.pas
13589 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13591 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13593 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13595 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE4-Enterprise-D18-RadStudio-11.0\source\rtl\common\System.Classes.pas
13573 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13575 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13577 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13579 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE5-Enterprise-D19-RadStudio-12.0\source\rtl\common\System.Classes.pas
13561 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13563 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13565 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13567 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE6-Enterprise-D20-RadStudio-14.0\source\rtl\common\System.Classes.pas
13589 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13591 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13593 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13595 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE7-Enterprise-D21-RadStudio-15.0\source\rtl\common\System.Classes.pas
13149 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13151 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13153 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13155 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE8-Enterprise-D22-RadStudio-16.0\source\rtl\common\System.Classes.pas
13343 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13345 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13347 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13349 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
RS19.0-source.bad\rtl\common\System.Classes.pas
13938 WriteAsciiStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
13940 WriteAsciiStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
13942 WriteAsciiStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
13944 WriteAsciiStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
C:\Delphi-RTL-VCL-FMX-Sources\Library-Sources>grep -ind “WriteStr\(FloatToStr” *Classes.pas
D1-CS-1.0\SOURCE\VCL\CLASSES.PAS
3423 WriteStr(FloatToStr(Ext));
D2-CS-2.0\SOURCE\VCL\CLASSES.PAS
4812 WriteStr(FloatToStr(Reader.ReadFloat));
D2006-Enterprise-D10-BDS-4.0\source\dotNet\rtl\Borland.Vcl.Classes.pas
11214 WriteStr(FloatToStr(Reader.ReadFloat));
11216 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
11220 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D2006-Enterprise-D10-BDS-4.0\source\Win32\rtl\common\Classes.pas
9091 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18));
9093 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
9095 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
9097 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D2007-Enterprise-D11-RadStudio-5.0\source\Win32\rtl\common\Classes.pas
9102 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18));
9104 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
9106 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
9108 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D2009-Enterprise-D12-RadStudio-6.0\source\Win32\rtl\common\Classes.pas
9967 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18));
9969 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
9971 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
9973 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D2010-Enterprise-D14-RadStudio-7.0\source\Win32\rtl\common\Classes.pas
10087 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18));
10089 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
10091 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
10093 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D3-CS\SOURCE\VCL\classes.pas
5430 WriteStr(FloatToStr(Reader.ReadFloat));
D4-CS\SOURCE\VCL\CLASSES.PAS
6239 WriteStr(FloatToStr(Reader.ReadFloat));
6241 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
6243 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
6245 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D5-Enterprise\Source\Vcl\classes.pas
6645 WriteStr(FloatToStr(Reader.ReadFloat));
6647 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
6649 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
6651 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D6-Enterprise\Source\Rtl\Common\Classes.pas
8345 WriteStr(FloatToStr(Reader.ReadFloat));
8347 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
8349 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
8351 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
D7.01.Architect\Source\Rtl\Common\Classes.pas
8613 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18));
8615 WriteStr(FloatToStr(Reader.ReadSingle) + ‘s’);
8617 WriteStr(FloatToStr(Reader.ReadCurrency * 10000) + ‘c’);
8619 WriteStr(FloatToStr(Reader.ReadDate) + ‘d’);
DXE-Enterprise-D15-RadStudio-8.0\source.15.0.3953.3571\rtl\common\Classes.pas
10438 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
10440 WriteStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
10442 WriteStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
10444 WriteStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE2-Enterprise-D16-RadStudio-9.0\source\rtl\common\System.Classes.pas
10805 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
10807 WriteStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
10809 WriteStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
10811 WriteStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
DXE2-Enterprise-D16-RadStudio-9.0\source.U1\rtl\common\System.Classes.pas
10805 WriteStr(FloatToStrF(Reader.ReadFloat, ffFixed, 16, 18, LFormatSettings));
10807 WriteStr(FloatToStr(Reader.ReadSingle, LFormatSettings) + ‘s’);
10809 WriteStr(FloatToStr(Reader.ReadCurrency * 10000, LFormatSettings) + ‘c’);
10811 WriteStr(FloatToStr(Reader.ReadDate, LFormatSettings) + ‘d’);
“`
Leave a comment