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 ATypeInfo : PTypeInfo;
|
||||||
const AData : Extended
|
const AData : Extended
|
||||||
):TDOMNode;
|
):TDOMNode;
|
||||||
Var
|
|
||||||
s, frmt : string;
|
|
||||||
prcsn : Integer;
|
|
||||||
{$IFNDEF HAS_FORMAT_SETTINGS}
|
|
||||||
i : Integer;
|
|
||||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
|
||||||
begin
|
begin
|
||||||
Case GetTypeData(ATypeInfo)^.FloatType Of
|
Result := InternalPutData(ANameSpace,AName,ATypeInfo,wst_FormatFloat(ATypeInfo,AData));
|
||||||
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);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSOAPBaseFormatter.GetNodeValue(const ANameSpace : string; var AName: String): DOMString;
|
function TSOAPBaseFormatter.GetNodeValue(const ANameSpace : string; var AName: String): DOMString;
|
||||||
@ -1088,7 +1066,7 @@ begin
|
|||||||
{$IFDEF HAS_FORMAT_SETTINGS}
|
{$IFDEF HAS_FORMAT_SETTINGS}
|
||||||
AData := StrToFloatDef(Trim(GetNodeValue(ANameSpace,AName)),0,wst_FormatSettings);
|
AData := StrToFloatDef(Trim(GetNodeValue(ANameSpace,AName)),0,wst_FormatSettings);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
AData := StrToFloatDef(TranslateDotToDecimalSeperator(Trim(GetNodeValue(ANameSpace:=;,AName))),0);
|
AData := StrToFloatDef(TranslateDotToDecimalSeperator(Trim(GetNodeValue(ANameSpace,AName))),0);
|
||||||
{$ENDIF HAS_FORMAT_SETTINGS}
|
{$ENDIF HAS_FORMAT_SETTINGS}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1735,8 +1713,6 @@ Var
|
|||||||
enumData : TEnumIntType;
|
enumData : TEnumIntType;
|
||||||
floatDt : Extended;
|
floatDt : Extended;
|
||||||
dataBuffer : DOMString;
|
dataBuffer : DOMString;
|
||||||
frmt : string;
|
|
||||||
prcsn,i : Integer;
|
|
||||||
wideStrData : WideString;
|
wideStrData : WideString;
|
||||||
{$IFDEF WST_UNICODESTRING}
|
{$IFDEF WST_UNICODESTRING}
|
||||||
unicodeStrData : UnicodeString;
|
unicodeStrData : UnicodeString;
|
||||||
@ -1825,37 +1801,13 @@ begin
|
|||||||
begin
|
begin
|
||||||
floatDt := 0;
|
floatDt := 0;
|
||||||
case GetTypeData(ATypeInfo)^.FloatType of
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
ftSingle :
|
ftSingle : floatDt := Single(AData);
|
||||||
begin
|
ftDouble : floatDt := Double(AData);
|
||||||
floatDt := Single(AData);
|
ftExtended : floatDt := Extended(AData);
|
||||||
prcsn := 7;
|
ftCurr : floatDt := Currency(AData);
|
||||||
|
ftComp : floatDt := Comp(AData);
|
||||||
end;
|
end;
|
||||||
ftDouble :
|
dataBuffer := wst_FormatFloat(ATypeInfo,floatDt);
|
||||||
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] := '.';
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
||||||
|
@ -922,23 +922,8 @@ function TXmlRpcBaseFormatter.PutFloat(
|
|||||||
const ATypeInfo : PTypeInfo;
|
const ATypeInfo : PTypeInfo;
|
||||||
const AData : Extended
|
const AData : Extended
|
||||||
):TDOMNode;
|
):TDOMNode;
|
||||||
Var
|
|
||||||
s, frmt : string;
|
|
||||||
prcsn,i : Integer;
|
|
||||||
begin
|
begin
|
||||||
Case GetTypeData(ATypeInfo)^.FloatType Of
|
Result := InternalPutData(AName,xdtdouble,wst_FormatFloat(ATypeInfo,AData));
|
||||||
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);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TXmlRpcBaseFormatter.GetNodeValue(var AName: string): DOMString;
|
function TXmlRpcBaseFormatter.GetNodeValue(var AName: string): DOMString;
|
||||||
@ -1388,8 +1373,6 @@ Var
|
|||||||
enumData : TEnumIntType;
|
enumData : TEnumIntType;
|
||||||
floatDt : Extended;
|
floatDt : Extended;
|
||||||
dataBuffer : DOMString;
|
dataBuffer : DOMString;
|
||||||
frmt : string;
|
|
||||||
prcsn,i : Integer;
|
|
||||||
wideStrData : WideString;
|
wideStrData : WideString;
|
||||||
{$IFDEF WST_UNICODESTRING}
|
{$IFDEF WST_UNICODESTRING}
|
||||||
unicodeStrData : UnicodeString;
|
unicodeStrData : UnicodeString;
|
||||||
@ -1478,37 +1461,13 @@ begin
|
|||||||
begin
|
begin
|
||||||
floatDt := 0;
|
floatDt := 0;
|
||||||
case GetTypeData(ATypeInfo)^.FloatType of
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
ftSingle :
|
ftSingle : floatDt := Single(AData);
|
||||||
begin
|
ftDouble : floatDt := Double(AData);
|
||||||
floatDt := Single(AData);
|
ftExtended : floatDt := Extended(AData);
|
||||||
prcsn := 7;
|
ftCurr : floatDt := Currency(AData);
|
||||||
|
ftComp : floatDt := Comp(AData);
|
||||||
end;
|
end;
|
||||||
ftDouble :
|
dataBuffer := wst_FormatFloat(ATypeInfo,floatDt);
|
||||||
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] := '.';
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
||||||
|
@ -46,6 +46,11 @@ Type
|
|||||||
function GetToken(var ABuffer : string; const ADelimiter : string): string;
|
function GetToken(var ABuffer : string; const ADelimiter : string): string;
|
||||||
function ExtractOptionName(const ACompleteName : string):string;
|
function ExtractOptionName(const ACompleteName : string):string;
|
||||||
function TranslateDotToDecimalSeperator(const Value: 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 LoadBufferFromFile(const AFileName : string) : TBinaryString;
|
||||||
function LoadBufferFromStream(AStream : TStream) : TBinaryString;
|
function LoadBufferFromStream(AStream : TStream) : TBinaryString;
|
||||||
@ -101,6 +106,43 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
function LoadBufferFromStream(AStream : TStream) : TBinaryString;
|
||||||
var
|
var
|
||||||
len : Int64;
|
len : Int64;
|
||||||
|
Reference in New Issue
Block a user