diff --git a/wst/trunk/base_soap_formatter.pas b/wst/trunk/base_soap_formatter.pas index bd484296a..958ef82b7 100644 --- a/wst/trunk/base_soap_formatter.pas +++ b/wst/trunk/base_soap_formatter.pas @@ -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; - 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; + ftSingle : floatDt := Single(AData); + ftDouble : floatDt := Double(AData); + ftExtended : floatDt := Extended(AData); + ftCurr : floatDt := Currency(AData); + ftComp : floatDt := Comp(AData); 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)); diff --git a/wst/trunk/base_xmlrpc_formatter.pas b/wst/trunk/base_xmlrpc_formatter.pas index bc166fc6b..7b33f0b31 100644 --- a/wst/trunk/base_xmlrpc_formatter.pas +++ b/wst/trunk/base_xmlrpc_formatter.pas @@ -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; - 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; + ftSingle : floatDt := Single(AData); + ftDouble : floatDt := Double(AData); + ftExtended : floatDt := Extended(AData); + ftCurr : floatDt := Currency(AData); + ftComp : floatDt := Comp(AData); 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)); diff --git a/wst/trunk/imp_utils.pas b/wst/trunk/imp_utils.pas index 04cf5c740..cbb066d0a 100644 --- a/wst/trunk/imp_utils.pas +++ b/wst/trunk/imp_utils.pas @@ -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;