如何在Delphi中使用正负号格式化数字

4
使用Delphi,当使用Format函数处理整数时,是否有一种方式可以强制进行符号输出?对于正数,应使用'+'(正号)前缀,对于负数,则应使用'-'(减号)前缀。在我的情况下,零的处理不重要(可以具有任意一个符号前缀或无前缀)。我想避免为每个格式化和if-then-else解决方案使用格式化助手函数。

3
你运气不好了,Format 函数没有这种能力。 - David Heffernan
1个回答

11

就像David已经评论过的那样Format函数没有提供这种格式说明符。

如果你真的想要一行代码解决问题,那么我认为你可以使用类似以下的代码:

uses
  Math;
const
  Signs: array[TValueSign] of String = ('', '', '+');
var
  I: Integer;
begin
  I := 100;
  Label1.Caption := Format('%s%d', [Signs[Sign(I)], I]);  // Output: +100
  I := -100;
  Label2.Caption := Format('%s%d', [Signs[Sign(I)], I]);  // Output: -100

但是我更喜欢制作一个单独的(库)程序:

function FormatInt(Value: Integer): String;
begin
  if Value > 0 then
    Result := '+' + IntToStr(Value)
  else
    Result := IntToStr(Value);
end;

感谢您使用Sign()和Abs()的解决方法。我寻找一行代码的解决方案,因为我想保留使用格式字符串指定前导零等功能的能力。 - blerontin
6
不要调用Abs,因为当输入为-2147483648时会得到意外的结果,只需对正数添加+,对非正数使用默认输出。所以,设置Signs = ('', '', '+'),然后使用Format('%s%d', [Signs[Sign(I)], I]) - Rob Kennedy
不错的解决方案 +1。为了使数字对齐并清晰可见,我更喜欢使用空格' '而不是加号'+'. - Ivan Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接