delphi xe5 StrToFloat故障将ThousandSeparator更改为’,’

我在这做错了什么?我只是想将格式化的字符串转换为double,并使用传入的TFormatSettings作为StrToFloat的参数.我得到以下异常:
'3,332.1' is not a valid floating point value.

千位分隔符和小数分隔符是TFormatSettings中的预期值(‘,’和’.’).

procedure TForm2.Button1Click(Sender: TObject);
var
  FS: TFormatSettings; 
  S: String;
  V: double;
begin
  FS:= TFormatSettings.Create; 
  codesite.Send('ThousandSeparator',FS.ThousandSeparator);  //correct ','
  codesite.Send('DecimalSeparator',FS.DecimalSeparator);    //correct '.'
  S := '3,332.1';
  try
    V := StrToFloat(S,FS);
  except on E: Exception do
    ShowMessage(e.Message);
  end;
  CodeSite.Send('S',S);
  CodeSite.Send('V',V);
end;

解决方法

什么,你在这里做的是正确的,但你在什么它似乎是一个错误无意中发现(如果不是一个错误至少不是很一致的行为)的TextToFloat的(它似乎忽略ThousandSeparator)德尔福SysUtils单元中的内部函数(取看看 Q92265跟随决议)…

作为一种解决方法,您可以尝试以这种方式删除组分隔符:

StringReplace('3,332.1',','',[rfReplaceAll])

相关文章

ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c++ 调用, 抽空研究了一下该库的最新版 ,把...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的功能是:将源操作数送到目的操作数中,即:...
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂...
API原型: Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (By...