如何将整数整数值转换为 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 和其他几个,它们似乎都等同于将现有的浮点数转换为字符串,或将浮点数字符串转换为数字。
我不确定是否有更清洁或更好的方法,但我的建议是使用 copy in conjunction with IntToStr。
var
number,version:string;
begin
number = IntToStr(1850);
version = 'V'+copy(number,1,2)+'.'+copy(number,3,1);
end;
您可以根据您的输入值自由添加 number
字符串的长度检查。
只需将整数值分配给浮点数并除以 100.0。
使用Format() or 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.
您可以使用 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));
当整数运算可以完成这项工作时,我个人不太喜欢使用浮点运算(在其他答案中看到的除以 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] := '.';
我不敢相信我为此苦苦挣扎!希望这是一个简单的。使用 Delphi 或 Freepascal:
给定整数值“1230”或“1850”,如何将其格式化为 3 位浮点字符串,其中小数点位于第 3 个位置,并丢弃尾随数字。
示例
1230 表示 "v12.3" 1850 表示 "v18.5"
因此我需要将前两位数字转换为字符串。然后插入一个小数位。将第三位数字转换为小数点后的字符串。并丢弃零。我查看了 Format、FormatFloat、Format 和其他几个,它们似乎都等同于将现有的浮点数转换为字符串,或将浮点数字符串转换为数字。
我不确定是否有更清洁或更好的方法,但我的建议是使用 copy in conjunction with IntToStr。
var
number,version:string;
begin
number = IntToStr(1850);
version = 'V'+copy(number,1,2)+'.'+copy(number,3,1);
end;
您可以根据您的输入值自由添加 number
字符串的长度检查。
只需将整数值分配给浮点数并除以 100.0。
使用Format() or 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.
您可以使用 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));
当整数运算可以完成这项工作时,我个人不太喜欢使用浮点运算(在其他答案中看到的除以 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] := '.';