首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将整数整值转换为3位点分离字符串

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

Stack Overflow用户
提问于 2019-11-26 13:50:13
回答 4查看 770关注 0票数 6

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

给定整个整数值"1230“或"1850",如何将其格式化为浮点数字符串,其中小数点位于第三个位置,尾数被丢弃。

示例

1230意为"v12.3“1850指"v18.5”

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-11-26 14:11:02

只需将整数值赋值给浮点数并除以100.0。

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

代码语言:javascript
复制
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.
票数 9
EN

Stack Overflow用户

发布于 2019-11-26 14:18:51

当整数算法能够完成这项工作时,我个人并不太在意使用浮点算法(在其他答案中用10种方法除以)。您正在将数字转换为不完美的表示,然后舍入到小数点后的一位。这些解决方案将有效,因为您可以对表示的不精确性进行足够的限制。但是,当算法可以精确地使用整数操作时,为什么还要启动浮点单元呢?

所以我总是会在这些线路上选择一些东西。

代码语言:javascript
复制
Major := Version div 100;
Minor := (Version mod 100) div 10;

其中Version是您的输入值。然后,可以将其转换为如下所示的字符串:

代码语言:javascript
复制
VersionText := Format('%d.%d', [Major, Minor]);

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

代码语言:javascript
复制
VersionText := IntToStr(Version);
N := Length(VersionText);
VersionText[N] := VersionText[N-1];
VersionText[N-1] := '.';
票数 9
EN

Stack Overflow用户

发布于 2019-11-26 14:04:39

我不确定是否有更干净或更好的方法,但我的建议是将复制IntToStr结合使用。

代码语言:javascript
复制
var
  number,version:string;
begin
  number = IntToStr(1850);
  version = 'V'+copy(number,1,2)+'.'+copy(number,3,1);
end;

您可以根据输入值添加number字符串长度的检查。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59052443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档