Browse Source

* patch by Евгений Савин to make Variant to string convertion use CurrToStr for varCurrency, resolves #40624

florian 1 year ago
parent
commit
b6ccf369b9
2 changed files with 26 additions and 4 deletions
  1. 4 4
      packages/rtl-objpas/src/inc/cvarutil.inc
  2. 22 0
      tests/webtbs/tw40624.pp

+ 4 - 4
packages/rtl-objpas/src/inc/cvarutil.inc

@@ -1283,7 +1283,7 @@ begin
 {$ifndef FPUNONE}
 {$ifndef FPUNONE}
         varSingle   : Result := FloatToStr(vSingle);
         varSingle   : Result := FloatToStr(vSingle);
         varDouble   : Result := FloatToStr(vDouble);
         varDouble   : Result := FloatToStr(vDouble);
-        varCurrency : Result := FloatToStr(vCurrency);
+        varCurrency : Result := CurrToStr(vCurrency);
         varDate     : Result := VarDateToString(vDate);
         varDate     : Result := VarDateToString(vDate);
 {$endif}
 {$endif}
         varBoolean  : Result := BoolToStr(vBoolean, True);
         varBoolean  : Result := BoolToStr(vBoolean, True);
@@ -1306,7 +1306,7 @@ begin
 {$ifndef FPUNONE}
 {$ifndef FPUNONE}
         varSingle   : Result := FloatToStr(PSingle(vPointer)^);
         varSingle   : Result := FloatToStr(PSingle(vPointer)^);
         varDouble   : Result := FloatToStr(PDouble(vPointer)^);
         varDouble   : Result := FloatToStr(PDouble(vPointer)^);
-        varCurrency : Result := FloatToStr(PCurrency(vPointer)^);
+        varCurrency : Result := CurrToStr(PCurrency(vPointer)^);
         varDate     : Result := VarDateToString(PDate(vPointer)^);
         varDate     : Result := VarDateToString(PDate(vPointer)^);
 {$endif}
 {$endif}
         varBoolean  : Result := BoolToStr(PWordBool(vPointer)^, True);
         varBoolean  : Result := BoolToStr(PWordBool(vPointer)^, True);
@@ -1350,7 +1350,7 @@ begin
 {$ifndef FPUNONE}
 {$ifndef FPUNONE}
         varSingle   : Result := FloatToStr(vSingle);
         varSingle   : Result := FloatToStr(vSingle);
         varDouble   : Result := FloatToStr(vDouble);
         varDouble   : Result := FloatToStr(vDouble);
-        varCurrency : Result := FloatToStr(vCurrency);
+        varCurrency : Result := CurrToStr(vCurrency);
         varDate     : Result := VarDateToString(vDate);
         varDate     : Result := VarDateToString(vDate);
 {$endif}
 {$endif}
         varBoolean  : Result := BoolToStr(vBoolean, True);
         varBoolean  : Result := BoolToStr(vBoolean, True);
@@ -1373,7 +1373,7 @@ begin
 {$ifndef FPUNONE}
 {$ifndef FPUNONE}
         varSingle   : Result := FloatToStr(PSingle(vPointer)^);
         varSingle   : Result := FloatToStr(PSingle(vPointer)^);
         varDouble   : Result := FloatToStr(PDouble(vPointer)^);
         varDouble   : Result := FloatToStr(PDouble(vPointer)^);
-        varCurrency : Result := FloatToStr(PCurrency(vPointer)^);
+        varCurrency : Result := CurrToStr(PCurrency(vPointer)^);
         varDate     : Result := VarDateToString(PDate(vPointer)^);
         varDate     : Result := VarDateToString(PDate(vPointer)^);
 {$endif}
 {$endif}
         varBoolean  : Result := BoolToStr(PWordBool(vPointer)^, True);
         varBoolean  : Result := BoolToStr(PWordBool(vPointer)^, True);

+ 22 - 0
tests/webtbs/tw40624.pp

@@ -0,0 +1,22 @@
+program tw40624;
+
+uses
+  SysUtils
+  { you can add units after this };
+
+var
+  C: Currency;
+  V: Variant;
+  S: string;
+begin
+  C := 822337203685477.5807;
+  V := C;
+  DefaultFormatSettings.DecimalSeparator := '.';
+
+  if CurrToStr(C) <> '822337203685477.5807' then
+    Halt(1);
+  S := V;
+  if S <> '822337203685477.5807' then
+    Halt(2);
+  WriteLn('OK');
+end.