繁体   English   中英

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

[英]How to convert integer whole value to 3 digit dot seperated string

我简直不敢相信我为此苦苦挣扎! 希望这是一个容易的。 使用 Delphi 或 Freepascal:

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

例子

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

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

只需将您的整数值分配给一个浮点数并除以 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 2007Delphi XE7上测试:

ShowMessage(MyFormat(1850));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM