You've already forked lazarus-ccr
Win64 extended floating fix
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@571 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -931,30 +931,8 @@ function TSOAPBaseFormatter.PutFloat(
|
||||
const ATypeInfo : PTypeInfo;
|
||||
const AData : Extended
|
||||
):TDOMNode;
|
||||
Var
|
||||
s, frmt : string;
|
||||
prcsn : Integer;
|
||||
{$IFNDEF HAS_FORMAT_SETTINGS}
|
||||
i : Integer;
|
||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||
begin
|
||||
Case GetTypeData(ATypeInfo)^.FloatType Of
|
||||
ftSingle,
|
||||
ftCurr,
|
||||
ftComp : prcsn := 7;
|
||||
ftDouble,
|
||||
ftExtended : prcsn := 15;
|
||||
End;
|
||||
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||
{$IFDEF HAS_FORMAT_SETTINGS}
|
||||
s := FormatFloat(frmt,AData,wst_FormatSettings);
|
||||
{$ELSE}
|
||||
s := FormatFloat(frmt,AData);
|
||||
i := Pos(',',s);
|
||||
if ( i > 0 ) then
|
||||
s[i] := '.';
|
||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||
Result := InternalPutData(ANameSpace,AName,ATypeInfo,s);
|
||||
Result := InternalPutData(ANameSpace,AName,ATypeInfo,wst_FormatFloat(ATypeInfo,AData));
|
||||
end;
|
||||
|
||||
function TSOAPBaseFormatter.GetNodeValue(const ANameSpace : string; var AName: String): DOMString;
|
||||
@ -1088,7 +1066,7 @@ begin
|
||||
{$IFDEF HAS_FORMAT_SETTINGS}
|
||||
AData := StrToFloatDef(Trim(GetNodeValue(ANameSpace,AName)),0,wst_FormatSettings);
|
||||
{$ELSE}
|
||||
AData := StrToFloatDef(TranslateDotToDecimalSeperator(Trim(GetNodeValue(ANameSpace:=;,AName))),0);
|
||||
AData := StrToFloatDef(TranslateDotToDecimalSeperator(Trim(GetNodeValue(ANameSpace,AName))),0);
|
||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||
end;
|
||||
|
||||
@ -1735,8 +1713,6 @@ Var
|
||||
enumData : TEnumIntType;
|
||||
floatDt : Extended;
|
||||
dataBuffer : DOMString;
|
||||
frmt : string;
|
||||
prcsn,i : Integer;
|
||||
wideStrData : WideString;
|
||||
{$IFDEF WST_UNICODESTRING}
|
||||
unicodeStrData : UnicodeString;
|
||||
@ -1825,37 +1801,13 @@ begin
|
||||
begin
|
||||
floatDt := 0;
|
||||
case GetTypeData(ATypeInfo)^.FloatType of
|
||||
ftSingle :
|
||||
begin
|
||||
floatDt := Single(AData);
|
||||
prcsn := 7;
|
||||
ftSingle : floatDt := Single(AData);
|
||||
ftDouble : floatDt := Double(AData);
|
||||
ftExtended : floatDt := Extended(AData);
|
||||
ftCurr : floatDt := Currency(AData);
|
||||
ftComp : floatDt := Comp(AData);
|
||||
end;
|
||||
ftDouble :
|
||||
begin
|
||||
floatDt := Double(AData);
|
||||
prcsn := 15;
|
||||
end;
|
||||
ftExtended :
|
||||
begin
|
||||
floatDt := Extended(AData);
|
||||
prcsn := 15;
|
||||
end;
|
||||
ftCurr :
|
||||
begin
|
||||
floatDt := Currency(AData);
|
||||
prcsn := 7;
|
||||
end;
|
||||
ftComp :
|
||||
begin
|
||||
floatDt := Comp(AData);
|
||||
prcsn := 7;
|
||||
end;
|
||||
end;
|
||||
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||
dataBuffer := FormatFloat(frmt,floatDt);
|
||||
i := Pos(',',dataBuffer);
|
||||
if ( i > 0 ) then
|
||||
dataBuffer[i] := '.';
|
||||
dataBuffer := wst_FormatFloat(ATypeInfo,floatDt);
|
||||
end;
|
||||
end;
|
||||
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
||||
|
@ -922,23 +922,8 @@ function TXmlRpcBaseFormatter.PutFloat(
|
||||
const ATypeInfo : PTypeInfo;
|
||||
const AData : Extended
|
||||
):TDOMNode;
|
||||
Var
|
||||
s, frmt : string;
|
||||
prcsn,i : Integer;
|
||||
begin
|
||||
Case GetTypeData(ATypeInfo)^.FloatType Of
|
||||
ftSingle,
|
||||
ftCurr,
|
||||
ftComp : prcsn := 7;
|
||||
ftDouble,
|
||||
ftExtended : prcsn := 15;
|
||||
End;
|
||||
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||
s := FormatFloat(frmt,AData);
|
||||
i := Pos(',',s);
|
||||
If ( i > 0 ) Then
|
||||
s[i] := '.';
|
||||
Result := InternalPutData(AName,xdtdouble,s);
|
||||
Result := InternalPutData(AName,xdtdouble,wst_FormatFloat(ATypeInfo,AData));
|
||||
end;
|
||||
|
||||
function TXmlRpcBaseFormatter.GetNodeValue(var AName: string): DOMString;
|
||||
@ -1388,8 +1373,6 @@ Var
|
||||
enumData : TEnumIntType;
|
||||
floatDt : Extended;
|
||||
dataBuffer : DOMString;
|
||||
frmt : string;
|
||||
prcsn,i : Integer;
|
||||
wideStrData : WideString;
|
||||
{$IFDEF WST_UNICODESTRING}
|
||||
unicodeStrData : UnicodeString;
|
||||
@ -1478,37 +1461,13 @@ begin
|
||||
begin
|
||||
floatDt := 0;
|
||||
case GetTypeData(ATypeInfo)^.FloatType of
|
||||
ftSingle :
|
||||
begin
|
||||
floatDt := Single(AData);
|
||||
prcsn := 7;
|
||||
ftSingle : floatDt := Single(AData);
|
||||
ftDouble : floatDt := Double(AData);
|
||||
ftExtended : floatDt := Extended(AData);
|
||||
ftCurr : floatDt := Currency(AData);
|
||||
ftComp : floatDt := Comp(AData);
|
||||
end;
|
||||
ftDouble :
|
||||
begin
|
||||
floatDt := Double(AData);
|
||||
prcsn := 15;
|
||||
end;
|
||||
ftExtended :
|
||||
begin
|
||||
floatDt := Extended(AData);
|
||||
prcsn := 15;
|
||||
end;
|
||||
ftCurr :
|
||||
begin
|
||||
floatDt := Currency(AData);
|
||||
prcsn := 7;
|
||||
end;
|
||||
ftComp :
|
||||
begin
|
||||
floatDt := Comp(AData);
|
||||
prcsn := 7;
|
||||
end;
|
||||
end;
|
||||
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||
dataBuffer := FormatFloat(frmt,floatDt);
|
||||
i := Pos(',',dataBuffer);
|
||||
if ( i > 0 ) then
|
||||
dataBuffer[i] := '.';
|
||||
dataBuffer := wst_FormatFloat(ATypeInfo,floatDt);
|
||||
end;
|
||||
end;
|
||||
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
||||
|
@ -46,6 +46,11 @@ Type
|
||||
function GetToken(var ABuffer : string; const ADelimiter : string): string;
|
||||
function ExtractOptionName(const ACompleteName : string):string;
|
||||
function TranslateDotToDecimalSeperator(const Value: string) : string;
|
||||
function wst_FormatFloat(
|
||||
const ATypeInfo : PTypeInfo;
|
||||
const AData : Extended
|
||||
) : string;
|
||||
|
||||
|
||||
function LoadBufferFromFile(const AFileName : string) : TBinaryString;
|
||||
function LoadBufferFromStream(AStream : TStream) : TBinaryString;
|
||||
@ -101,6 +106,43 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function wst_FormatFloat(
|
||||
const ATypeInfo : PTypeInfo;
|
||||
const AData : Extended
|
||||
) : string;
|
||||
var
|
||||
s, frmt : string;
|
||||
prcsn : Integer;
|
||||
{$IFNDEF HAS_FORMAT_SETTINGS}
|
||||
i : PtrInt;
|
||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||
begin
|
||||
case GetTypeData(ATypeInfo)^.FloatType Of
|
||||
ftSingle,
|
||||
ftCurr,
|
||||
ftComp : prcsn := 7;
|
||||
ftDouble,
|
||||
ftExtended :
|
||||
begin
|
||||
{$IF Defined(FPC_HAS_TYPE_DOUBLE) OR Defined(FPC_HAS_TYPE_EXTENDED)}
|
||||
prcsn := 14;
|
||||
{$ELSE}
|
||||
prcsn := 7;
|
||||
{$IFEND}
|
||||
end;
|
||||
end;
|
||||
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||
{$IFDEF HAS_FORMAT_SETTINGS}
|
||||
s := FormatFloat(frmt,AData,wst_FormatSettings);
|
||||
{$ELSE}
|
||||
s := FormatFloat(frmt,AData);
|
||||
i := Pos(',',s);
|
||||
if ( i > 0 ) then
|
||||
s[i] := '.';
|
||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||
Result := s
|
||||
end;
|
||||
|
||||
function LoadBufferFromStream(AStream : TStream) : TBinaryString;
|
||||
var
|
||||
len : Int64;
|
||||
|
Reference in New Issue
Block a user