Delphi 格式(';%7.8f';,[varFloat])仅格式化小数
格式('%7.8f',[varFloat])仅格式化小数 例如,13,98变为1398000000。 我必须使用的是: 0000001398000000Delphi 格式(';%7.8f';,[varFloat])仅格式化小数,delphi,string-formatting,Delphi,String Formatting,格式('%7.8f',[varFloat])仅格式化小数 例如,13,98变为1398000000。 我必须使用的是: 0000001398000000 我知道这是一个枯燥的问题,但我的时间很短,我找不到为什么没有按我所希望的那样工作。如果您准备进入system C运行时,可以使用sprintf。例如: {$APPTYPE CONSOLE} function sprintf(buf: Pointer; format: PAnsiChar): Integer; cdecl; varargs
我知道这是一个枯燥的问题,但我的时间很短,我找不到为什么没有按我所希望的那样工作。如果您准备进入system C运行时,可以使用
sprintf
。例如:
{$APPTYPE CONSOLE}
function sprintf(buf: Pointer; format: PAnsiChar): Integer; cdecl;
varargs; external 'msvcrt.dll';
var
buf: array [0..255] of AnsiChar;
val: Double;
begin
val := 13.98;
sprintf(@buf, '%015.8f', val);
Writeln(buf);
Readln;
end.
这将产生:
000013.98000000
13.98000000
您可能会考虑选择一种防止缓冲区溢出的变体
但是会更容易。如果您准备进入system C运行时,您可以使用
sprintf
。例如:
{$APPTYPE CONSOLE}
function sprintf(buf: Pointer; format: PAnsiChar): Integer; cdecl;
varargs; external 'msvcrt.dll';
var
buf: array [0..255] of AnsiChar;
val: Double;
begin
val := 13.98;
sprintf(@buf, '%015.8f', val);
Writeln(buf);
Readln;
end.
这将产生:
000013.98000000
13.98000000
您可能会考虑选择一种防止缓冲区溢出的变体
但是会更容易。当Pos(','string)9在字符串前面加上'0'时,如果正数为空,您想要18个位置吗?您的问题并不完全清楚。您期望的输出是什么?您想要整个部分的前导零,还是不想要小数点后的多余零?
FormatFloat('0000000.00000000',13.98))
@user246408,这应该是答案!当Pos(','string)9在字符串“0”前加上前缀时,如果是正数,则需要18个位置,其中第一个位置为空?您的问题并不完全清楚。您期望的输出是什么?您想要整个部分的前导零,还是不想要小数点后的多余零?FormatFloat('0000000.00000000',13.98))
@user246408,这应该是答案@Vladds如果您根据FormatFloat()
编写一个答案并接受它,那会更好。这个答案是古董。FWIW,我最近使用了Delphi中的sprintf来避免IntToStr无法避免的堆分配。得知Delphi RTL无法使用调用方提供的缓冲区将int转换为string,我很难过代码>一个循环(n)到10.000.000,带有Str(n,aShortString)代码>vssprintf(@buf,'%d',n)代码>在x32模式下给出437对2224毫秒。@最后,我使用Str使用的相同DivMod方法推出了自己的LURD。因此,我今天提出问题。我自己这样做是为了避免使用短字符串。做了很多单元测试。一些有趣的角落案例。特别是abs(val),其中val为低(整数)且溢出/范围检查处于活动状态。能够根据IntToStr测试所有32位值。64位整数不可能。谢谢你的想法@Vladds如果您根据FormatFloat()
编写一个答案并接受它,那会更好。这个答案是古董。FWIW,我最近使用了Delphi中的sprintf来避免IntToStr无法避免的堆分配。得知Delphi RTL无法使用调用方提供的缓冲区将int转换为string,我很难过代码>一个循环(n)到10.000.000,带有Str(n,aShortString)代码>vssprintf(@buf,'%d',n)代码>在x32模式下给出437对2224毫秒。@最后,我使用Str使用的相同DivMod方法推出了自己的LURD。因此,我今天提出问题。我自己这样做是为了避免使用短字符串。做了很多单元测试。一些有趣的角落案例。特别是abs(val),其中val为低(整数)且溢出/范围检查处于活动状态。能够根据IntToStr测试所有32位值。64位整数不可能。谢谢你的想法!!