如何在Delphi中往返格式双精度值?

时间:2018-04-18 21:57:44

标签: xml delphi serialization

如何在Delphi中将格式双精度值往返格式化为字符串?

这是我在C#中看到的一个功能...能够将双精度数字格式化为将其反序列化为完全相同的数字。 https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#RFormatString

我一直在使用Delphi中的代码格式化它们,但发现它的值有时不相同:

  Result:=Format('%e', [d], FMyFormatSettings_FIXED_FORMAT);

我正在使用XML进行序列化。我觉得有必要自己格式化它而不是使用IXMLNode的NodeValue方法,因为我的测试表明NodeValue使用了本地化设置。

1 个答案:

答案 0 :(得分:3)

Delphi在浮点数和文本之间进行转换的功能在这方面存在缺陷。实际上,准确地执行此操作实际上非常困难,并且具有可以使浮点值往返的功能。

在我看来,你有两个主要的可能性来解决这个问题:

  • 使用没有数字不准确性的第三方例程。例如来自C运行时库的strtodsprintf
  • 而不是转换为人类可读的十进制,base 64编码double的8个字节。注意处理字节序。