【问题标题】:When is a Float not a float?什么时候浮点数不是浮点数?
【发布时间】:2016-04-27 19:27:47
【问题描述】:

我的实用程序 (docto) 的用户在 github 上记录了一个他遇到错误的问题。错误是

错误:EConvertError '11.0' 不是有效的浮点值

现在从表面上看,“11.0”在我看来是一个有效的浮点数,实际上我认为导致错误的代码是 here

if (strtofloat(OfficeAppVersion) < 14) then

即使我安装了 word 版本“14.0”,我也无法重现该错误。

Delphi 的 strtofloat 函数不会将“11.0”识别为浮点数。

我最初的想法是在里面加个修剪看看有没有隐藏的字符

if (strtofloat(trim(OfficeAppVersion)) < 14) then

感谢您的任何想法。

【问题讨论】:

  • 小数点在目标语言环境中可能不是'.'。
  • 非常感谢。第一个将其作为答案的被接受。
  • 当小数点不是小数点时,浮点数不是浮点数 :) 而是在语言环境设置中使用逗号。

标签: delphi type-conversion docto


【解决方案1】:

正如其他人所说,问题在于机器的默认语言环境使用与'.' 不同的字符作为小数分隔符。如果需要转换使用'.' 的字符串,可以使用StrToFloat() 的重载版本,它接受TFormatSettings 作为输入:

var
  fmt: TFormatSettings;
begin
  fmt := TFormatSettings.Create; // get default settings first
  fmt.DecimalSeparator := '.'; // customize as needed
  if (StrToFloat(OfficeAppVersion, fmt) < 14) then
  ...
end;

【讨论】:

    【解决方案2】:

    您的用户语言环境很可能使用逗号作为小数分隔符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2022-10-06
      • 2019-07-08
      • 2021-08-05
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多