AsFloat转换为字符串

问题描述

| 你好 我想将\“ qrysth.Fields [i] .AsFloat \”转换为字符串,所以我使用以下代码: FormatFloat(\'0。############## \',qrysth.Fields [i] .AsFloat) 但是我发现结果字符串是12.000000000000001,而qrysth.Fields [i] .AsFloat是12.00。我知道FormatFloat实际上不使用12.00进行转换,而是使用无限数量的二进制文件进行转换。 (例如十进制中的0.1为0.1,但是在二进制中为0.00011001100 ... 在上述情况下,还有其他方法可以获得12.00吗?或至少12.000000000000000?     

解决方法

  我想转换   \“ qrysth.Fields [i] .AsFloat \”转换为字符串 那为什么不使用AsString呢?
qrysth.Fields[i].AsString
只要您不关心确切的宽度,这将为您提供最佳的表示。如果是的话,请使用
FormatFloat
以及所需的确切位数-换句话说,如果您要查找
12.00
,请使用
FormatFloat(\'##.##\',qrysth.Fields[i].AsFloat)
,甚至更好的
CurrToStr
AsCurrency
,因为它们会自动使用小数点后的两位数。     ,如果您确实得到了12.000000000000001,则您的字段未恰好容纳12,因此输出正确。您要求通过在格式中放置许多
#
字符来实现高精度。如果您不希望它如此精确,请使用不太精确的格式字符串。     ,
FormatFloat(\'0.00\',qrysth.Fields[i].AsFloat)
等于\ '12 .00 \'。 要获得\ '12 .000000000000000 \',您应该自己进行四舍五入,因为这不会损失精度。     ,
function MyFormatFloat(V: Double): String;
const
  DesiredMinPrec = \'0.000000000000000\';
  AssumedMaxPrec = \'0.#####\';
begin
  Result := FormatFloat(DesiredMinPrec,StrToFloat(FormatFloat(AssumedMaxPrec,V)));
end;