代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

将扩展(80位)转换为字符串

  •  8
  • Ian Boyd  · 技术社区  · 7 年前

    如何将扩展精度浮点值转换为字符串?

    背景

    Intel CPU支持三种浮点格式:

    1 回复  |  直到 7 年前
        1
  •  6
  •   LU RD    7 年前

    如何将扩展精度浮点值转换为字符串?

    因为Delphi RTL没有任何正确和完整的实现 FloatToStr() 功能 Extended (和 Double 为此,我们需要使用一个外部库 here 最初在 EDN, Codecentral .

    这个库是由JohnHerbster创建的,他是DelphiRTL库的长期贡献者,特别是在浮点处理方面。GitHub源代码已更新为使用Unicode字符串处理和 TFormatSettings 用于格式化的结构。该库包含 ExactFloatToStr() 处理浮动的函数 扩展 ,请 Single 类型。

    Program TestExactFloatToStr; 
    
    {$APPTYPE CONSOLE}
    
    Uses
      SysUtils,ExactFloatToStr_JH0;
    
    begin
      WriteLn(ExactFloatToStr(Extended(0.49999999999999999)));
      WriteLn(ExactFloatToStr(Double(0.49999999999999999)));
      WriteLn(ExactFloatToStr(Single(0.49999999999999999)));
      ReadLn;
    end.
    

    输出:

    0.49999999999999998999823495882122159628124791197478771209716796875
    0.5
    0.5