如何将整数整数值转换为3位点分隔字符串

我不敢相信我为此付出了太多努力!希望这是一件容易的事。使用Delphi或Freepascal:

给出整个整数值“ 1230”或“ 1850”,如何将其格式化为3位浮点字符串,其中小数点位于第3位,而尾随数字被丢弃。

示例

1230表示“ v12.3” 1850表示“ v18.5”

所以我需要将前两位数字转换为字符串。然后插入小数位。将第三位数字转换为小数点后的字符串。并丢弃零。我看过Format,FormatFloat,Format和其他几种,它们似乎都等同于将现有的浮点数转换为字符串,或将浮点数字符串转换为数字。

chkxchkx 回答:如何将整数整数值转换为3位点分隔字符串

只需将您的整数值分配给浮点数并除以100.0。

使用Format()FormatFloat()将值转换为具有三位数字和小数点的字符串:

program Project8;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

var
  i : Integer;
const
  myFormat : TFormatSettings = (DecimalSeparator: '.');
begin
  i := 1230;
  WriteLn(Format('v%4.1f',[i/100.0],myFormat));   // Writes v12.3
  WriteLn(FormatFloat('v##.#',i/100.0,myFormat)); // Writes v12.3
  ReadLn;
end.
,

当整数算术可以完成工作时,我个人不太在意使用浮点算术(在其他答案中看到的除以10的方法)。您正在将数字转换为不完美的表示形式,然后四舍五入到小数点后一位。这些解决方案将起作用,因为您可以对表示的准确性施加足够的限制。但是,当可以使用整数运算精确完成算术运算时,为什么还要触发浮点数呢?

所以我总是会在这些行中选择一些东西。

Major := Version div 100;
Minor := (Version mod 100) div 10;

Version是您的输入值。然后可以将其转换为类似这样的字符串:

VersionText := Format('%d.%d',[Major,Minor]);

您甚至可以在没有任何显式算术的情况下进行转换:

VersionText := IntToStr(Version);
N := Length(VersionText);
VersionText[N] := VersionText[N-1];
VersionText[N-1] := '.';
,

我不确定是否有更清洁或更佳的方法,但是我的建议是将copyIntToStr结合使用。

var
  number,version:string;
begin
  number = IntToStr(1850);
  version = 'V'+copy(number,1,2)+'.'+copy(number,3,1);
end;

您可以根据自己的输入值随意添加number字符串长度的校验。

,

您可以使用FormatFloat函数来做到这一点。

function MyFormat(ANumber : integer) : string;
const
  C_LOC_FORMAT_SETTINGS : TFormatSettings = (DecimalSeparator: '.');
begin
  Result := FormatFloat('v0.0',ANumber/100,C_LOC_FORMAT_SETTINGS);
end;

Delphi 2007 Delphi XE7 上进行了测试:

ShowMessage(MyFormat(1850));

本文链接:https://www.f2er.com/3028640.html

大家都在问