
program VarStrTofloat;{$APPTYPE CONSolE}uses SysUtils,Math;function FormatfloatUsingDelphiSettings(Value: Extended): string;begin Result := Formatfloat('#,##0.00',Value);end;procedure Test(const AMsg: string);var r1,r2: Extended; s1,s2: string; v: Variant;begin r1 := 5432.1; s1 := FormatfloatUsingDelphiSettings(r1); v := s1; // <== conversion uses OS settings r2 := v; s2 := FormatfloatUsingDelphiSettings(r2); Write(AMsg: 8,s1: 10,s2: 10,' '); if SameValue(r1,r2) then Writeln('OK') else Writeln('FAIL');end;procedure SwapEm;var tmp: Char;begin tmp := DecimalSeparator; DecimalSeparator := ThousandSeparator; ThousandSeparator := tmp;end;begin Test('Default'); SwapEm; Test('Changed'); Readln;end. 第一个测试工作正常,第二个测试失败.
有没有办法让Variant转换使用SysUtils.DecimalSeparator和SysUtils.ThousandSeparator?
解决方法 您可以根据自己的喜好替换varutils.pas中的VarR8FromStr函数,VarTodoubleAsstring将使用它:function MyConversion(const strIn: WIDeString; LCID: Integer; DWFlags: Longint; out dblOut: Double): HRESulT; stdcall;const CResult: array [False..True] of HRESulT = (VAR_INVALIDARG,VAR_OK);var s: string;begin s := StringReplace(StrIn,ThousandSeparator,'',[rfReplaceAll]); Result := CResult[TryStrTofloat(s,dblOut)];end;[...]begin varutils.VarR8FromStr := MyConversion; [...]总结
以上是内存溢出为你收集整理的使VarToDoubleAsString使用Delphi设置(不是OS设置)全部内容,希望文章能够帮你解决使VarToDoubleAsString使用Delphi设置(不是OS设置)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)