代码之家  ›  专栏  ›  技术社区  ›  Jerry Dodge

如何格式化任意浮点数以适应给定的显示宽度?

  •  0
  • Jerry Dodge  · 技术社区  · 7 年前

    我在做一个项目 TEdit 控件显示任意数值,格式为特定的度量单位,因此它也具有任意后缀。此编辑控件的宽度是固定的(但是可以根据重新调整UI的大小而更改),我需要确保显示的任何数字都能合理地适应此控件,而不会溢出到视图之外。

    把它想象成在计算器屏幕上安装一个数学答案,因为这就是我正在做的。

    function FormattedValue(const ANum: Double; const ASuffix: String; 
      const AWidth: Integer; const DC: HDC): String;
    begin
      Result:= FormatFloat('#,###,###,##0.######', ANum) + ASuffix;
      //TODO: How to enforce result to always fit within AWidth pixels?
      //DC = canvas handle of the control where text will be displayed
    
    end;
    

    但是,我完全不知道如何格式化它以适应它 AWidth 约束,这将是 TEdit.ClientWidth . 我发现了 FloatToStrF ,我相信这是需要的,但即使这样也与可用的显示区域无关。

    到目前为止,我看到的唯一方法是加载与画布相关联的字体,迭代所有可能的字符,寻找尽可能宽的字符。然后,看看在给定的宽度内最大字符可以容纳多少倍。然后,使用 浮动至TRF

    在必要时使用科学记数法时,我如何做到这一点?

    0 回复  |  直到 7 年前